diff --git a/.github/workflows/build-and-push-bskyweb-aws.yaml b/.github/workflows/build-and-push-bskyweb-aws.yaml index a7c8f4588e..39136fca9a 100644 --- a/.github/workflows/build-and-push-bskyweb-aws.yaml +++ b/.github/workflows/build-and-push-bskyweb-aws.yaml @@ -3,7 +3,7 @@ on: push: branches: - main - - jake/bskyweb-additions + - traffic-reduction env: REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }} USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }} diff --git a/app.config.js b/app.config.js index c2df6760e2..181a67c46d 100644 --- a/app.config.js +++ b/app.config.js @@ -9,12 +9,12 @@ module.exports = function () { /** * iOS build number. Must be incremented for each TestFlight version. */ - const IOS_BUILD_NUMBER = '10' + const IOS_BUILD_NUMBER = '1' /** * Android build number. Must be incremented for each release. */ - const ANDROID_VERSION_CODE = 46 + const ANDROID_VERSION_CODE = 48 /** * Uses built-in Expo env vars diff --git a/jest/test-pds.ts b/jest/test-pds.ts index a0cb04a163..25faddfa7b 100644 --- a/jest/test-pds.ts +++ b/jest/test-pds.ts @@ -67,7 +67,6 @@ export async function createServer( pds: { port, hostname: 'localhost', - dbPostgresSchema: `pds_${id}`, inviteRequired, }, bsky: { diff --git a/package.json b/package.json index 070d1cc576..2f380e807b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bsky.app", - "version": "1.57.0", + "version": "1.58.0", "private": true, "scripts": { "prepare": "is-ci || husky install", @@ -35,7 +35,7 @@ "intl:compile": "lingui compile" }, "dependencies": { - "@atproto/api": "^0.7.0", + "@atproto/api": "^0.7.2", "@bam.tech/react-native-image-resizer": "^3.0.4", "@braintree/sanitize-url": "^6.0.2", "@emoji-mart/react": "^1.1.1", @@ -169,7 +169,7 @@ "zod": "^3.20.2" }, "devDependencies": { - "@atproto/dev-env": "^0.2.16", + "@atproto/dev-env": "^0.2.19", "@babel/core": "^7.23.2", "@babel/preset-env": "^7.20.0", "@babel/runtime": "^7.20.0", diff --git a/src/App.native.tsx b/src/App.native.tsx index 538e9b32d2..d11d05e705 100644 --- a/src/App.native.tsx +++ b/src/App.native.tsx @@ -39,7 +39,7 @@ SplashScreen.preventAutoHideAsync() function InnerApp() { const colorMode = useColorMode() - const {currentAccount} = useSession() + const {isInitialLoad, currentAccount} = useSession() const {resumeSession} = useSessionApi() // init @@ -53,6 +53,9 @@ function InnerApp() { resumeSession(account) }, [resumeSession]) + // wait for session to resume + if (isInitialLoad) return null + return ( { - logger.info('analytics: track', {args}) await getClient().track(...args) } @@ -40,11 +39,9 @@ export function useAnalytics(): AnalyticsMethods { if (hasSession) { return { async screen(...args) { - logger.info('analytics: screen', {args}) await getClient().screen(...args) }, async track(...args) { - logger.info('analytics: track', {args}) await getClient().track(...args) }, } diff --git a/src/lib/analytics/analytics.web.tsx b/src/lib/analytics/analytics.web.tsx index b717950ae1..1be8e608a4 100644 --- a/src/lib/analytics/analytics.web.tsx +++ b/src/lib/analytics/analytics.web.tsx @@ -30,7 +30,6 @@ function getClient(): SegmentClient { } export const track: TrackEvent = async (...args) => { - logger.info('analytics: track', {args}) await getClient().track(...args) } @@ -40,11 +39,9 @@ export function useAnalytics(): AnalyticsMethods { if (hasSession) { return { async screen(...args) { - logger.info('analytics: screen', {args}) await getClient().screen(...args) }, async track(...args) { - logger.info('analytics: track', {args}) await getClient().track(...args) }, } diff --git a/src/lib/analytics/types.ts b/src/lib/analytics/types.ts index 9883cc36e9..3d2ebb312e 100644 --- a/src/lib/analytics/types.ts +++ b/src/lib/analytics/types.ts @@ -21,6 +21,7 @@ interface TrackPropertiesMap { 'Composer:PastedPhotos': {} 'Composer:CameraOpened': {} 'Composer:GalleryOpened': {} + 'Composer:ThreadgateOpened': {} 'HomeScreen:PressCompose': {} 'ProfileScreen:PressCompose': {} // EDIT PROFILE events diff --git a/src/lib/api/feed/author.ts b/src/lib/api/feed/author.ts index 74af383d11..57db061b33 100644 --- a/src/lib/api/feed/author.ts +++ b/src/lib/api/feed/author.ts @@ -40,7 +40,7 @@ export class AuthorFeedAPI implements FeedAPI { } _filter(feed: AppBskyFeedDefs.FeedViewPost[]) { - if (this.params.filter === 'posts_no_replies') { + if (this.params.filter === 'posts_and_author_threads') { return feed.filter(post => { const isReply = post.reply const isRepost = AppBskyFeedDefs.isReasonRepost(post.reason) diff --git a/src/lib/api/feed/merge.ts b/src/lib/api/feed/merge.ts index 381159d181..a4391afb25 100644 --- a/src/lib/api/feed/merge.ts +++ b/src/lib/api/feed/merge.ts @@ -62,7 +62,7 @@ export class MergeFeedAPI implements FeedAPI { // always keep following topped up if (this.following.numReady < limit) { - promises.push(this.following.fetchNext(60)) + await this.following.fetchNext(60) } // pick the next feeds to sample from @@ -73,9 +73,13 @@ export class MergeFeedAPI implements FeedAPI { } // top up the feeds - for (const feed of feeds) { - if (feed.numReady < 5) { - promises.push(feed.fetchNext(10)) + const outOfFollows = + !this.following.hasMore && this.following.numReady < limit + if (this.params.mergeFeedEnabled || outOfFollows) { + for (const feed of feeds) { + if (feed.numReady < 5) { + promises.push(feed.fetchNext(10)) + } } } @@ -216,22 +220,10 @@ class MergeFeedSource_Custom extends MergeFeedSource { super(feedTuners) this.sourceInfo = { $type: 'reasonFeedSource', - displayName: feedUri.split('/').pop() || '', - uri: feedUriToHref(feedUri), + uri: feedUri, + href: feedUriToHref(feedUri), } this.minDate = new Date(Date.now() - POST_AGE_CUTOFF) - getAgent() - .app.bsky.feed.getFeedGenerator({ - feed: feedUri, - }) - .then( - res => { - if (this.sourceInfo) { - this.sourceInfo.displayName = res.data.view.displayName - } - }, - _err => {}, - ) } protected async _getFeed( diff --git a/src/lib/api/feed/types.ts b/src/lib/api/feed/types.ts index 5d2a90c1db..abc6511baf 100644 --- a/src/lib/api/feed/types.ts +++ b/src/lib/api/feed/types.ts @@ -19,7 +19,7 @@ export interface FeedAPI { export interface ReasonFeedSource { $type: 'reasonFeedSource' uri: string - displayName: string + href: string } export function isReasonFeedSource(v: unknown): v is ReasonFeedSource { diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index a78abcacdb..d94ee4643b 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -3,6 +3,7 @@ import { AppBskyEmbedExternal, AppBskyEmbedRecord, AppBskyEmbedRecordWithMedia, + AppBskyFeedThreadgate, AppBskyRichtextFacet, BskyAgent, ComAtprotoLabelDefs, @@ -16,6 +17,7 @@ import {isWeb} from 'platform/detection' import {ImageModel} from 'state/models/media/image' import {shortenLinks} from 'lib/strings/rich-text-manip' import {logger} from '#/logger' +import {ThreadgateSetting} from '#/state/queries/threadgate' export interface ExternalEmbedDraft { uri: string @@ -54,6 +56,7 @@ interface PostOpts { extLink?: ExternalEmbedDraft images?: ImageModel[] labels?: string[] + threadgate?: ThreadgateSetting[] onStateChange?: (state: string) => void langs?: string[] } @@ -227,9 +230,10 @@ export async function post(agent: BskyAgent, opts: PostOpts) { langs = opts.langs.slice(0, 3) } + let res try { opts.onStateChange?.('Posting...') - return await agent.post({ + res = await agent.post({ text: rt.text, facets: rt.facets, reply, @@ -247,6 +251,52 @@ export async function post(agent: BskyAgent, opts: PostOpts) { throw e } } + + try { + // TODO: this needs to be batch-created with the post! + if (opts.threadgate?.length) { + await createThreadgate(agent, res.uri, opts.threadgate) + } + } catch (e: any) { + console.error(`Failed to create threadgate: ${e.toString()}`) + throw new Error( + 'Post reply-controls failed to be set. Your post was created but anyone can reply to it.', + ) + } + + return res +} + +async function createThreadgate( + agent: BskyAgent, + postUri: string, + threadgate: ThreadgateSetting[], +) { + let allow: ( + | AppBskyFeedThreadgate.MentionRule + | AppBskyFeedThreadgate.FollowingRule + | AppBskyFeedThreadgate.ListRule + )[] = [] + if (!threadgate.find(v => v.type === 'nobody')) { + for (const rule of threadgate) { + if (rule.type === 'mention') { + allow.push({$type: 'app.bsky.feed.threadgate#mentionRule'}) + } else if (rule.type === 'following') { + allow.push({$type: 'app.bsky.feed.threadgate#followingRule'}) + } else if (rule.type === 'list') { + allow.push({ + $type: 'app.bsky.feed.threadgate#listRule', + list: rule.list, + }) + } + } + } + + const postUrip = new AtUri(postUri) + await agent.api.app.bsky.feed.threadgate.create( + {repo: agent.session!.did, rkey: postUrip.rkey}, + {post: postUri, createdAt: new Date().toISOString(), allow}, + ) } // helpers diff --git a/src/lib/notifications/notifications.ts b/src/lib/notifications/notifications.ts index d115dc98fa..342839a7bf 100644 --- a/src/lib/notifications/notifications.ts +++ b/src/lib/notifications/notifications.ts @@ -81,6 +81,7 @@ export function registerTokenChangeHandler( export function init(queryClient: QueryClient) { // handle notifications that are received, both in the foreground or background + // NOTE: currently just here for debug logging Notifications.addNotificationReceivedListener(event => { logger.debug( 'Notifications: received', @@ -88,8 +89,6 @@ export function init(queryClient: QueryClient) { logger.DebugContext.notifications, ) if (event.request.trigger.type === 'push') { - // refresh notifications in the background - truncateAndInvalidate(queryClient, RQKEY_NOTIFS()) // handle payload-based deeplinks let payload if (isIOS) { diff --git a/src/locale/__tests__/helpers.test.ts b/src/locale/__tests__/helpers.test.ts new file mode 100644 index 0000000000..d4bc6c3386 --- /dev/null +++ b/src/locale/__tests__/helpers.test.ts @@ -0,0 +1,12 @@ +import {test, expect} from '@jest/globals' + +import {sanitizeAppLanguageSetting} from '#/locale/helpers' +import {AppLanguage} from '#/locale/languages' + +test('sanitizeAppLanguageSetting', () => { + expect(sanitizeAppLanguageSetting('en')).toBe(AppLanguage.en) + expect(sanitizeAppLanguageSetting('hi')).toBe(AppLanguage.hi) + expect(sanitizeAppLanguageSetting('foo')).toBe(AppLanguage.en) + expect(sanitizeAppLanguageSetting('en,fr')).toBe(AppLanguage.en) + expect(sanitizeAppLanguageSetting('fr,en')).toBe(AppLanguage.en) +}) diff --git a/src/locale/helpers.ts b/src/locale/helpers.ts index 65db32f2f5..d80cb5032b 100644 --- a/src/locale/helpers.ts +++ b/src/locale/helpers.ts @@ -2,7 +2,11 @@ import {AppBskyFeedDefs, AppBskyFeedPost} from '@atproto/api' import lande from 'lande' import {hasProp} from 'lib/type-guards' import * as bcp47Match from 'bcp-47-match' -import {LANGUAGES_MAP_CODE2, LANGUAGES_MAP_CODE3} from './languages' +import { + AppLanguage, + LANGUAGES_MAP_CODE2, + LANGUAGES_MAP_CODE3, +} from './languages' export function code2ToCode3(lang: string): string { if (lang.length === 2) { @@ -84,3 +88,34 @@ export function getTranslatorLink(text: string, lang: string): string { text, )}` } + +/** + * Returns a valid `appLanguage` value from an arbitrary string. + * + * Contenxt: post-refactor, we populated some user's `appLanguage` setting with + * `postLanguage`, which can be a comma-separated list of values. This breaks + * `appLanguage` handling in the app, so we introduced this util to parse out a + * valid `appLanguage` from the pre-populated `postLanguage` values. + * + * The `appLanguage` will continue to be incorrect until the user returns to + * language settings and selects a new option, at which point we'll re-save + * their choice, which should then be a valid option. Since we don't know when + * this will happen, we should leave this here until we feel it's safe to + * remove, or we re-migrate their storage. + */ +export function sanitizeAppLanguageSetting(appLanguage: string): AppLanguage { + const langs = appLanguage.split(',').filter(Boolean) + + for (const lang of langs) { + switch (lang) { + case 'en': + return AppLanguage.en + case 'hi': + return AppLanguage.hi + default: + continue + } + } + + return AppLanguage.en +} diff --git a/src/locale/i18n.ts b/src/locale/i18n.ts index 770a258a65..2e54b15ea5 100644 --- a/src/locale/i18n.ts +++ b/src/locale/i18n.ts @@ -4,29 +4,28 @@ import {i18n} from '@lingui/core' import {useLanguagePrefs} from '#/state/preferences' import {messages as messagesEn} from '#/locale/locales/en/messages' import {messages as messagesHi} from '#/locale/locales/hi/messages' - -export const locales = { - en: 'English', - hi: 'हिंदी', - ja: '日本語', -} -export const defaultLocale = 'en' +import {sanitizeAppLanguageSetting} from '#/locale/helpers' +import {AppLanguage} from '#/locale/languages' /** * We do a dynamic import of just the catalog that we need - * @param locale any locale string */ -export async function dynamicActivate(locale: string) { - if (locale === 'hi') { - i18n.loadAndActivate({locale, messages: messagesHi}) - } else { - i18n.loadAndActivate({locale, messages: messagesEn}) +export async function dynamicActivate(locale: AppLanguage) { + switch (locale) { + case AppLanguage.hi: { + i18n.loadAndActivate({locale, messages: messagesHi}) + break + } + default: { + i18n.loadAndActivate({locale, messages: messagesEn}) + break + } } } export async function useLocaleLanguage() { const {appLanguage} = useLanguagePrefs() useEffect(() => { - dynamicActivate(appLanguage) + dynamicActivate(sanitizeAppLanguageSetting(appLanguage)) }, [appLanguage]) } diff --git a/src/locale/i18n.web.ts b/src/locale/i18n.web.ts index edacc7850c..54963836b7 100644 --- a/src/locale/i18n.web.ts +++ b/src/locale/i18n.web.ts @@ -2,25 +2,24 @@ import {useEffect} from 'react' import {i18n} from '@lingui/core' import {useLanguagePrefs} from '#/state/preferences' - -export const locales = { - en: 'English', - hi: 'हिंदी', - ja: '日本語', -} -export const defaultLocale = 'en' +import {sanitizeAppLanguageSetting} from '#/locale/helpers' +import {AppLanguage} from '#/locale/languages' /** * We do a dynamic import of just the catalog that we need - * @param locale any locale string */ -export async function dynamicActivate(locale: string) { +export async function dynamicActivate(locale: AppLanguage) { let mod: any - if (locale === 'hi') { - mod = await import(`./locales/hi/messages`) - } else { - mod = await import(`./locales/en/messages`) + switch (locale) { + case AppLanguage.hi: { + mod = await import(`./locales/hi/messages`) + break + } + default: { + mod = await import(`./locales/en/messages`) + break + } } i18n.load(locale, mod.messages) @@ -30,6 +29,6 @@ export async function dynamicActivate(locale: string) { export async function useLocaleLanguage() { const {appLanguage} = useLanguagePrefs() useEffect(() => { - dynamicActivate(appLanguage) + dynamicActivate(sanitizeAppLanguageSetting(appLanguage)) }, [appLanguage]) } diff --git a/src/locale/languages.ts b/src/locale/languages.ts index b67ca89cf8..411b4a262a 100644 --- a/src/locale/languages.ts +++ b/src/locale/languages.ts @@ -4,15 +4,21 @@ interface Language { name: string } -interface AppLanguage { - code2: string +export enum AppLanguage { + en = 'en', + hi = 'hi', + ja = 'ja', +} + +interface AppLanguageConfig { + code2: AppLanguage name: string } -export const APP_LANGUAGES: AppLanguage[] = [ - {code2: 'en', name: 'English'}, - {code2: 'hi', name: 'हिंदी'}, - {code2: 'ja', name: '日本語'}, +export const APP_LANGUAGES: AppLanguageConfig[] = [ + {code2: AppLanguage.en, name: 'English'}, + {code2: AppLanguage.hi, name: 'हिंदी'}, + {code2: AppLanguage.ja, name: '日本語'}, ] export const LANGUAGES: Language[] = [ diff --git a/src/locale/locales/cs/messages.po b/src/locale/locales/cs/messages.po new file mode 100644 index 0000000000..ce4ebf113d --- /dev/null +++ b/src/locale/locales/cs/messages.po @@ -0,0 +1,2479 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2023-11-05 16:01-0800\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: cs\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/view/screens/Profile.tsx:214 +#~ msgid "- end of feed -" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:138 +#~ msgid ". This warning is only available for posts with media attached." +#~ msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:158 +msgid "{0, plural, one {# invite code available} other {# invite codes available}}" +msgstr "" + +#: src/view/com/modals/Repost.tsx:44 +msgid "{0}" +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:176 +msgid "{0} {purposeLabel} List" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:141 +msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" +msgstr "" + +#: src/view/screens/Settings.tsx:407 +#: src/view/shell/Drawer.tsx:648 +msgid "{invitesAvailable} invite code available" +msgstr "" + +#: src/view/screens/Settings.tsx:409 +#: src/view/shell/Drawer.tsx:650 +msgid "{invitesAvailable} invite codes available" +msgstr "" + +#: src/view/screens/Search/Search.tsx:87 +msgid "{message}" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:130 +msgid "<0/> members" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 +msgid "<0>Choose your<1>Recommended<2>Feeds" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some<1>Recommended<2>Users" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:132 +#~ msgid "<0>Here is your app password. Use this to sign into the other app along with your handle." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: This setting may not be respected by third-party apps that display Bluesky content." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting." +#~ msgstr "" + +#: src/lib/hooks/useOTAUpdate.ts:16 +msgid "A new version of the app is available. Please update to continue using the app." +msgstr "" + +#: src/view/com/modals/EditImage.tsx:299 +#: src/view/screens/Settings.tsx:417 +msgid "Accessibility" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/screens/Settings.tsx:286 +msgid "Account" +msgstr "" + +#: src/view/com/util/AccountDropdownBtn.tsx:41 +msgid "Account options" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/screens/ProfileList.tsx:783 +msgid "Add" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:56 +msgid "Add a content warning" +msgstr "" + +#: src/view/screens/ProfileList.tsx:773 +msgid "Add a user to this list" +msgstr "" + +#: src/view/screens/Settings.tsx:355 +#: src/view/screens/Settings.tsx:364 +msgid "Add account" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:119 +#: src/view/com/composer/photos/Gallery.tsx:180 +msgid "Add alt text" +msgstr "" + +#: src/view/com/modals/report/InputIssueDetails.tsx:41 +#: src/view/com/modals/report/Modal.tsx:191 +msgid "Add details" +msgstr "" + +#: src/view/com/modals/report/Modal.tsx:194 +msgid "Add details to report" +msgstr "" + +#: src/view/com/composer/Composer.tsx:425 +msgid "Add link card" +msgstr "" + +#: src/view/com/composer/Composer.tsx:428 +msgid "Add link card:" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:415 +msgid "Add the following DNS record to your domain:" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:329 +msgid "Add to Lists" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:280 +msgid "Add to my feeds" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:191 +#: src/view/com/modals/UserAddRemoveLists.tsx:128 +msgid "Added to list" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:164 +msgid "Adjust the number of likes a reply must have to be shown in your feed." +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:75 +msgid "Adult Content" +msgstr "" + +#: src/view/screens/Settings.tsx:569 +msgid "Advanced" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:130 +msgid "ALT" +msgstr "" + +#: src/view/com/modals/EditImage.tsx:315 +msgid "Alt text" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:209 +msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:110 +msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:119 +msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below." +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:236 +msgid "and" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:94 +msgid "App Language" +msgstr "" + +#: src/view/screens/Settings.tsx:589 +msgid "App passwords" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:186 +msgid "App Passwords" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:65 +msgid "Appeal Decision" +msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:51 +msgid "Appeal this decision" +msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:55 +msgid "Appeal this decision." +msgstr "" + +#: src/view/screens/Settings.tsx:432 +msgid "Appearance" +msgstr "" + +#: src/view/screens/Moderation.tsx:206 +#~ msgid "Apps that respect this setting, including the official Bluesky app and bsky.app website, won't show your content to logged out users." +#~ msgstr "" + +#: src/view/screens/AppPasswords.tsx:223 +msgid "Are you sure you want to delete the app password \"{name}\"?" +msgstr "" + +#: src/view/com/composer/Composer.tsx:139 +msgid "Are you sure you'd like to discard this draft?" +msgstr "" + +#: src/view/screens/ProfileList.tsx:375 +msgid "Are you sure?" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:185 +msgid "Are you sure? This cannot be undone." +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:123 +msgid "Artistic or non-erotic nudity." +msgstr "" + +#: src/view/screens/Moderation.tsx:189 +#~ msgid "Ask apps to limit the visibility of my account" +#~ msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:145 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:166 +#: src/view/com/auth/login/LoginForm.tsx:249 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:45 +#: src/view/com/post-thread/PostThread.tsx:385 +#: src/view/com/post-thread/PostThread.tsx:435 +#: src/view/com/post-thread/PostThread.tsx:443 +#: src/view/com/profile/ProfileHeader.tsx:648 +msgid "Back" +msgstr "" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:131 +#: src/view/com/modals/BirthDateSettings.tsx:72 +msgid "Birthday" +msgstr "" + +#: src/view/screens/Settings.tsx:312 +msgid "Birthday:" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:258 +#: src/view/com/profile/ProfileHeader.tsx:365 +msgid "Block Account" +msgstr "" + +#: src/view/screens/ProfileList.tsx:545 +msgid "Block accounts" +msgstr "" + +#: src/view/screens/ProfileList.tsx:495 +msgid "Block list" +msgstr "" + +#: src/view/screens/ProfileList.tsx:330 +msgid "Block these accounts?" +msgstr "" + +#: src/view/screens/Moderation.tsx:121 +msgid "Blocked accounts" +msgstr "" + +#: src/view/screens/ModerationBlockedAccounts.tsx:106 +msgid "Blocked Accounts" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:260 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "" + +#: src/view/screens/ModerationBlockedAccounts.tsx:114 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours." +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:241 +msgid "Blocked post." +msgstr "" + +#: src/view/screens/ProfileList.tsx:332 +msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:26 +msgid "Bluesky" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80 +msgid "Bluesky is flexible." +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69 +msgid "Bluesky is open." +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56 +msgid "Bluesky is public." +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:70 +msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon." +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:78 +msgid "Bluesky.Social" +msgstr "" + +#: src/view/screens/Settings.tsx:718 +msgid "Build version {0} {1}" +msgstr "" + +#: src/view/com/composer/photos/OpenCameraBtn.tsx:60 +#: src/view/com/util/UserAvatar.tsx:217 +#: src/view/com/util/UserBanner.tsx:38 +msgid "Camera" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:214 +msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." +msgstr "" + +#: src/view/com/composer/Composer.tsx:278 +#: src/view/com/composer/Composer.tsx:281 +#: src/view/com/modals/AltImage.tsx:127 +#: src/view/com/modals/ChangeEmail.tsx:218 +#: src/view/com/modals/ChangeEmail.tsx:220 +#: src/view/com/modals/Confirm.tsx:88 +#: src/view/com/modals/CreateOrEditList.tsx:267 +#: src/view/com/modals/CreateOrEditList.tsx:272 +#: src/view/com/modals/DeleteAccount.tsx:150 +#: src/view/com/modals/DeleteAccount.tsx:223 +#: src/view/com/modals/EditImage.tsx:323 +#: src/view/com/modals/EditProfile.tsx:248 +#: src/view/com/modals/LinkWarning.tsx:85 +#: src/view/com/modals/Repost.tsx:73 +#: src/view/com/modals/Waitlist.tsx:136 +#: src/view/screens/Search/Search.tsx:558 +#: src/view/shell/desktop/Search.tsx:182 +msgid "Cancel" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:146 +#: src/view/com/modals/DeleteAccount.tsx:219 +msgid "Cancel account deletion" +msgstr "" + +#: src/view/com/modals/AltImage.tsx:122 +msgid "Cancel add image alt text" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:149 +msgid "Cancel change handle" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:134 +msgid "Cancel image crop" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:243 +msgid "Cancel profile editing" +msgstr "" + +#: src/view/com/modals/Repost.tsx:64 +msgid "Cancel quote post" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:87 +#: src/view/shell/desktop/Search.tsx:178 +msgid "Cancel search" +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:132 +msgid "Cancel waitlist signup" +msgstr "" + +#: src/view/screens/Settings.tsx:306 +msgid "Change" +msgstr "" + +#: src/view/screens/Settings.tsx:601 +#: src/view/screens/Settings.tsx:610 +msgid "Change handle" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:161 +msgid "Change Handle" +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:133 +msgid "Change my email" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:109 +msgid "Change Your Email" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121 +msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds." +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185 +msgid "Check out some recommended users. Follow them to see similar users." +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:163 +msgid "Check your inbox for an email with the confirmation code to enter below:" +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:38 +msgid "Choose Service" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83 +msgid "Choose the algorithms that power your experience with custom feeds." +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:65 +#~ msgid "Choose your" +#~ msgstr "" + +#: src/view/com/auth/create/Step2.tsx:106 +msgid "Choose your password" +msgstr "" + +#: src/view/screens/Settings.tsx:694 +msgid "Clear all legacy storage data" +msgstr "" + +#: src/view/screens/Settings.tsx:696 +msgid "Clear all legacy storage data (restart after this)" +msgstr "" + +#: src/view/screens/Settings.tsx:706 +msgid "Clear all storage data" +msgstr "" + +#: src/view/screens/Settings.tsx:708 +msgid "Clear all storage data (restart after this)" +msgstr "" + +#: src/view/com/util/forms/SearchInput.tsx:73 +#: src/view/screens/Search/Search.tsx:543 +msgid "Clear search query" +msgstr "" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38 +msgid "Close alert" +msgstr "" + +#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33 +msgid "Close bottom drawer" +msgstr "" + +#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26 +msgid "Close image" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:112 +msgid "Close image viewer" +msgstr "" + +#: src/view/shell/index.web.tsx:49 +msgid "Close navigation footer" +msgstr "" + +#: src/view/screens/CommunityGuidelines.tsx:32 +msgid "Community Guidelines" +msgstr "" + +#: src/view/com/composer/Prompt.tsx:24 +msgid "Compose reply" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:98 +#: src/view/com/modals/Confirm.tsx:75 +#: src/view/com/modals/SelfLabel.tsx:154 +#: src/view/com/modals/VerifyEmail.tsx:217 +#: src/view/screens/PreferencesHomeFeed.tsx:299 +#: src/view/screens/PreferencesThreads.tsx:153 +msgid "Confirm" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:193 +#: src/view/com/modals/ChangeEmail.tsx:195 +msgid "Confirm Change" +msgstr "" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34 +msgid "Confirm content language settings" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:209 +msgid "Confirm delete account" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:157 +#: src/view/com/modals/DeleteAccount.tsx:176 +#: src/view/com/modals/VerifyEmail.tsx:151 +msgid "Confirmation code" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:178 +#: src/view/com/auth/login/LoginForm.tsx:268 +msgid "Connecting..." +msgstr "" + +#: src/view/screens/Moderation.tsx:79 +msgid "Content filtering" +msgstr "" + +#: src/view/com/modals/ContentFilteringSettings.tsx:44 +msgid "Content Filtering" +msgstr "" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74 +#: src/view/screens/LanguageSettings.tsx:277 +msgid "Content Languages" +msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:69 +msgid "Content Warning" +msgstr "" + +#: src/view/com/composer/labels/LabelsBtn.tsx:31 +msgid "Content warnings" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209 +msgid "Continue" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:193 +#: src/view/com/modals/InviteCodes.tsx:179 +msgid "Copied" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:186 +msgid "Copy" +msgstr "" + +#: src/view/screens/ProfileList.tsx:407 +msgid "Copy link to list" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:126 +msgid "Copy link to post" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:314 +msgid "Copy link to profile" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:112 +msgid "Copy post text" +msgstr "" + +#: src/view/screens/CopyrightPolicy.tsx:29 +msgid "Copyright Policy" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:103 +msgid "Could not load feed" +msgstr "" + +#: src/view/screens/ProfileList.tsx:860 +msgid "Could not load list" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:41 +msgid "Create a new account" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:124 +msgid "Create Account" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:38 +msgid "Create new account" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:248 +msgid "Created {0}" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:387 +#: src/view/com/modals/ServerInput.tsx:102 +msgid "Custom domain" +msgstr "" + +#: src/view/screens/Settings.tsx:615 +msgid "Danger Zone" +msgstr "" + +#: src/view/screens/Settings.tsx:411 +#~ msgid "Dark" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:622 +msgid "Delete account" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:83 +msgid "Delete Account" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:221 +#: src/view/screens/AppPasswords.tsx:241 +msgid "Delete app password" +msgstr "" + +#: src/view/screens/ProfileList.tsx:374 +#: src/view/screens/ProfileList.tsx:434 +msgid "Delete List" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:212 +msgid "Delete my account" +msgstr "" + +#: src/view/screens/Settings.tsx:632 +msgid "Delete my account…" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:180 +msgid "Delete post" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:184 +msgid "Delete this post?" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:233 +msgid "Deleted post." +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:218 +#: src/view/com/modals/CreateOrEditList.tsx:234 +#: src/view/com/modals/EditProfile.tsx:197 +#: src/view/com/modals/EditProfile.tsx:209 +msgid "Description" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:96 +msgid "Dev Server" +msgstr "" + +#: src/view/screens/Settings.tsx:637 +msgid "Developer Tools" +msgstr "" + +#: src/view/com/composer/Composer.tsx:140 +msgid "Discard" +msgstr "" + +#: src/view/com/composer/Composer.tsx:134 +msgid "Discard draft" +msgstr "" + +#: src/view/screens/Feeds.tsx:405 +msgid "Discover new feeds" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:191 +msgid "Display name" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:179 +msgid "Display Name" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:485 +msgid "Domain verified!" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/ContentFilteringSettings.tsx:88 +#: src/view/com/modals/ContentFilteringSettings.tsx:96 +#: src/view/com/modals/crop-image/CropImage.web.tsx:152 +#: src/view/com/modals/EditImage.tsx:333 +#: src/view/com/modals/ListAddRemoveUsers.tsx:142 +#: src/view/com/modals/SelfLabel.tsx:157 +#: src/view/com/modals/UserAddRemoveLists.tsx:79 +#: src/view/screens/PreferencesHomeFeed.tsx:302 +#: src/view/screens/PreferencesThreads.tsx:156 +msgid "Done" +msgstr "" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42 +msgid "Done{extraText}" +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:94 +msgid "Each code works once. You'll receive more invite codes periodically." +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:144 +#: src/view/com/modals/EditImage.tsx:207 +msgid "Edit image" +msgstr "" + +#: src/view/screens/ProfileList.tsx:422 +msgid "Edit list details" +msgstr "" + +#: src/view/screens/Feeds.tsx:367 +#: src/view/screens/SavedFeeds.tsx:85 +msgid "Edit My Feeds" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:151 +msgid "Edit my profile" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:429 +msgid "Edit profile" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:432 +msgid "Edit Profile" +msgstr "" + +#: src/view/screens/Feeds.tsx:330 +msgid "Edit Saved Feeds" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:90 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:148 +#: src/view/com/modals/ChangeEmail.tsx:141 +#: src/view/com/modals/Waitlist.tsx:88 +msgid "Email" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:81 +msgid "Email address" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:111 +msgid "Email Updated" +msgstr "" + +#: src/view/screens/Settings.tsx:290 +msgid "Email:" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:138 +msgid "Enable this setting to only see replies between people you follow." +msgstr "" + +#: src/view/screens/Profile.tsx:472 +msgid "End of feed" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:71 +msgid "Enter the address of your provider:" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:369 +msgid "Enter the domain you want to use" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:101 +msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password." +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:86 +msgid "Enter your email address" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:117 +msgid "Enter your new email address below." +msgstr "" + +#: src/view/com/auth/login/Login.tsx:99 +msgid "Enter your username and password" +msgstr "" + +#: src/view/screens/Search/Search.tsx:105 +msgid "Error:" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:156 +msgid "Expand alt text" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 +msgid "Failed to load recommended feeds" +msgstr "" + +#: src/view/screens/Feeds.tsx:559 +msgid "Feed offline" +msgstr "" + +#: src/view/com/feeds/FeedPage.tsx:140 +msgid "Feed Preferences" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:64 +#: src/view/shell/Drawer.tsx:300 +msgid "Feedback" +msgstr "" + +#: src/view/screens/Feeds.tsx:475 +#: src/view/shell/bottom-bar/BottomBar.tsx:168 +#: src/view/shell/desktop/LeftNav.tsx:341 +#: src/view/shell/Drawer.tsx:463 +#: src/view/shell/Drawer.tsx:464 +msgid "Feeds" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57 +msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:156 +msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150 +msgid "Finding similar accounts..." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:102 +msgid "Fine-tune the content you see on your home screen." +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:60 +msgid "Fine-tune the discussion threads." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:514 +msgid "Follow" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:42 +#~ msgid "Follow some" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64 +msgid "Follow some users to get started. We can recommend you more users based on who you find interesting." +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:145 +msgid "Followed users only" +msgstr "" + +#: src/view/screens/ProfileFollowers.tsx:25 +msgid "Followers" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:600 +msgid "following" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:498 +#: src/view/screens/ProfileFollows.tsx:25 +msgid "Following" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:547 +msgid "Follows you" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:107 +msgid "For security reasons, we'll need to send a confirmation code to your email address." +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:207 +msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:231 +msgid "Forgot" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:228 +msgid "Forgot password" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:127 +#: src/view/com/auth/login/Login.tsx:143 +msgid "Forgot Password" +msgstr "" + +#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43 +msgid "Gallery" +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:175 +msgid "Get Started" +msgstr "" + +#: src/view/com/auth/LoggedOut.tsx:68 +#: src/view/com/auth/LoggedOut.tsx:69 +#: src/view/com/util/moderation/ScreenHider.tsx:105 +#: src/view/shell/desktop/LeftNav.tsx:106 +msgid "Go back" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:112 +#: src/view/screens/ProfileFeed.tsx:117 +#: src/view/screens/ProfileList.tsx:869 +#: src/view/screens/ProfileList.tsx:874 +msgid "Go Back" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:278 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:163 +msgid "Go to next" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:265 +msgid "Handle" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:93 +#: src/view/shell/Drawer.tsx:310 +msgid "Help" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:148 +msgid "Here is your app password." +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:316 +msgid "Hide" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:308 +msgid "Hide user list" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:102 +#~ msgid "Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:110 +msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:104 +msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:101 +msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:95 +msgid "Hmm, we're having trouble finding this feed. It may have been deleted." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:87 +#~ msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +#~ msgstr "" + +#: src/view/shell/bottom-bar/BottomBar.tsx:124 +#: src/view/shell/desktop/LeftNav.tsx:305 +#: src/view/shell/Drawer.tsx:387 +#: src/view/shell/Drawer.tsx:388 +msgid "Home" +msgstr "" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:99 +#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/Settings.tsx:481 +msgid "Home Feed Preferences" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:114 +msgid "Hosting provider" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:76 +#: src/view/com/auth/create/Step1.tsx:81 +msgid "Hosting provider address" +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:200 +msgid "I have a code" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:281 +msgid "I have my own domain" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:127 +msgid "If none are selected, suitable for all ages." +msgstr "" + +#: src/view/com/modals/AltImage.tsx:96 +msgid "Image alt text" +msgstr "" + +#: src/view/com/util/UserAvatar.tsx:304 +#: src/view/com/util/UserBanner.tsx:116 +msgid "Image options" +msgstr "" + +#: src/view/com/search/Suggestions.tsx:104 +#: src/view/com/search/Suggestions.tsx:115 +#~ msgid "In Your Network" +#~ msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:113 +msgid "Invalid username or password" +msgstr "" + +#: src/view/screens/Settings.tsx:383 +msgid "Invite" +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:91 +#: src/view/screens/Settings.tsx:371 +msgid "Invite a Friend" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:57 +msgid "Invite code" +msgstr "" + +#: src/view/com/auth/create/state.ts:136 +msgid "Invite code not accepted. Check that you input it correctly and try again." +msgstr "" + +#: src/view/shell/Drawer.tsx:629 +msgid "Invite codes: {invitesAvailable} available" +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:67 +msgid "Join the waitlist" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:68 +#: src/view/com/auth/create/Step2.tsx:72 +msgid "Join the waitlist." +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:124 +msgid "Join Waitlist" +msgstr "" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:104 +msgid "Language selection" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:88 +msgid "Language Settings" +msgstr "" + +#: src/view/screens/Settings.tsx:541 +msgid "Languages" +msgstr "" + +#: src/view/com/util/moderation/PostAlerts.tsx:47 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65 +#: src/view/com/util/moderation/ScreenHider.tsx:88 +msgid "Learn More" +msgstr "" + +#: src/view/com/util/moderation/ContentHider.tsx:83 +#: src/view/com/util/moderation/PostAlerts.tsx:40 +#: src/view/com/util/moderation/PostHider.tsx:76 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49 +#: src/view/com/util/moderation/ScreenHider.tsx:85 +msgid "Learn more about this warning" +msgstr "" + +#: src/view/screens/Moderation.tsx:239 +msgid "Learn more about what is public on Bluesky." +msgstr "" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82 +msgid "Leave them all unchecked to see any language." +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:49 +msgid "Leaving Bluesky" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:128 +#: src/view/com/auth/login/Login.tsx:144 +msgid "Let's get your password reset!" +msgstr "" + +#: src/view/com/util/UserAvatar.tsx:241 +#: src/view/com/util/UserBanner.tsx:60 +msgid "Library" +msgstr "" + +#: src/view/screens/Settings.tsx:405 +#~ msgid "Light" +#~ msgstr "" + +#: src/view/screens/ProfileFeed.tsx:643 +msgid "Like this feed" +msgstr "" + +#: src/view/screens/PostLikedBy.tsx:27 +#: src/view/screens/ProfileFeedLikedBy.tsx:27 +msgid "Liked by" +msgstr "" + +#: src/view/screens/Moderation.tsx:203 +#~ msgid "Limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:203 +msgid "Limit the visibility of my account to logged-out users" +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:186 +msgid "List Avatar" +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:199 +msgid "List Name" +msgstr "" + +#: src/view/shell/desktop/LeftNav.tsx:381 +#: src/view/shell/Drawer.tsx:479 +#: src/view/shell/Drawer.tsx:480 +msgid "Lists" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:250 +#: src/view/com/post-thread/PostThread.tsx:258 +msgid "Load more posts" +msgstr "" + +#: src/view/screens/Notifications.tsx:130 +msgid "Load new notifications" +msgstr "" + +#: src/view/com/feeds/FeedPage.tsx:185 +msgid "Load new posts" +msgstr "" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 +msgid "Loading..." +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:50 +msgid "Local dev server" +msgstr "" + +#: src/view/screens/Moderation.tsx:134 +msgid "Logged-out users" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 +msgid "Login to account that is not listed" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:482 +msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!" +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:63 +msgid "Make sure this is where you intend to go!" +msgstr "" + +#: src/view/screens/Search/Search.tsx:503 +msgid "Menu" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:194 +#: src/view/screens/ProfileFeed.tsx:490 +msgid "Message from server" +msgstr "" + +#: src/view/screens/Moderation.tsx:63 +#: src/view/screens/Settings.tsx:563 +#: src/view/shell/desktop/LeftNav.tsx:399 +#: src/view/shell/Drawer.tsx:498 +#: src/view/shell/Drawer.tsx:499 +msgid "Moderation" +msgstr "" + +#: src/view/screens/Moderation.tsx:93 +msgid "Moderation lists" +msgstr "" + +#: src/view/screens/ModerationModlists.tsx:58 +msgid "Moderation Lists" +msgstr "" + +#: src/view/shell/desktop/Feeds.tsx:53 +msgid "More feeds" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:524 +#: src/view/screens/ProfileFeed.tsx:370 +#: src/view/screens/ProfileList.tsx:606 +msgid "More options" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:158 +#~ msgid "More post options" +#~ msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:346 +msgid "Mute Account" +msgstr "" + +#: src/view/screens/ProfileList.tsx:533 +msgid "Mute accounts" +msgstr "" + +#: src/view/screens/ProfileList.tsx:480 +msgid "Mute list" +msgstr "" + +#: src/view/screens/ProfileList.tsx:293 +msgid "Mute these accounts?" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:144 +msgid "Mute thread" +msgstr "" + +#: src/view/screens/Moderation.tsx:107 +msgid "Muted accounts" +msgstr "" + +#: src/view/screens/ModerationMutedAccounts.tsx:106 +msgid "Muted Accounts" +msgstr "" + +#: src/view/screens/ModerationMutedAccounts.tsx:114 +msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private." +msgstr "" + +#: src/view/screens/ProfileList.tsx:295 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "" + +#: src/view/screens/Moderation.tsx:134 +#~ msgid "My Account" +#~ msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:56 +msgid "My Birthday" +msgstr "" + +#: src/view/screens/Feeds.tsx:363 +msgid "My Feeds" +msgstr "" + +#: src/view/shell/desktop/LeftNav.tsx:67 +msgid "My Profile" +msgstr "" + +#: src/view/screens/Settings.tsx:520 +msgid "My Saved Feeds" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:177 +#: src/view/com/modals/CreateOrEditList.tsx:211 +msgid "Name" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 +msgid "Never lose access to your followers and data." +msgstr "" + +#: src/view/screens/Lists.tsx:76 +#: src/view/screens/ModerationModlists.tsx:78 +msgid "New" +msgstr "" + +#: src/view/com/feeds/FeedPage.tsx:196 +#: src/view/screens/Feeds.tsx:510 +#: src/view/screens/Profile.tsx:389 +#: src/view/screens/ProfileFeed.tsx:451 +#: src/view/screens/ProfileList.tsx:212 +#: src/view/screens/ProfileList.tsx:244 +#: src/view/shell/desktop/LeftNav.tsx:254 +msgid "New post" +msgstr "" + +#: src/view/shell/desktop/LeftNav.tsx:264 +msgid "New Post" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:158 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:174 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:184 +#: src/view/com/auth/login/LoginForm.tsx:281 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:156 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:166 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 +msgid "Next" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:142 +msgid "Next image" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:191 +#: src/view/screens/PreferencesHomeFeed.tsx:226 +#: src/view/screens/PreferencesHomeFeed.tsx:263 +msgid "No" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:636 +#: src/view/screens/ProfileList.tsx:740 +msgid "No description" +msgstr "" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97 +msgid "No result" +msgstr "" + +#: src/view/screens/Feeds.tsx:452 +msgid "No results found for \"{query}\"" +msgstr "" + +#: src/view/com/modals/ListAddUser.tsx:142 +#: src/view/shell/desktop/Search.tsx:112 +#~ msgid "No results found for {0}" +#~ msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:127 +#: src/view/screens/Search/Search.tsx:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:581 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:136 +#~ msgid "Not Applicable" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:135 +msgid "Not Applicable." +msgstr "" + +#: src/view/screens/Moderation.tsx:227 +msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +msgstr "" + +#: src/view/screens/Moderation.tsx:227 +#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." +#~ msgstr "" + +#: src/view/screens/Notifications.tsx:97 +#: src/view/screens/Notifications.tsx:121 +#: src/view/shell/bottom-bar/BottomBar.tsx:195 +#: src/view/shell/desktop/LeftNav.tsx:363 +#: src/view/shell/Drawer.tsx:424 +#: src/view/shell/Drawer.tsx:425 +msgid "Notifications" +msgstr "" + +#: src/view/com/util/ErrorBoundary.tsx:34 +msgid "Oh no!" +msgstr "" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41 +msgid "Okay" +msgstr "" + +#: src/view/com/composer/Composer.tsx:341 +msgid "One or more images is missing alt text." +msgstr "" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:79 +msgid "Open navigation" +msgstr "" + +#: src/view/screens/Settings.tsx:533 +msgid "Opens configurable language settings" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:146 +#: src/view/shell/Drawer.tsx:630 +msgid "Opens list of invite codes" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:279 +msgid "Opens modal for using custom domain" +msgstr "" + +#: src/view/screens/Settings.tsx:558 +msgid "Opens moderation settings" +msgstr "" + +#: src/view/screens/Settings.tsx:514 +msgid "Opens screen with all saved feeds" +msgstr "" + +#: src/view/screens/Settings.tsx:581 +msgid "Opens the app password settings page" +msgstr "" + +#: src/view/screens/Settings.tsx:473 +msgid "Opens the home feed preferences" +msgstr "" + +#: src/view/screens/Settings.tsx:664 +msgid "Opens the storybook page" +msgstr "" + +#: src/view/screens/Settings.tsx:644 +msgid "Opens the system log page" +msgstr "" + +#: src/view/screens/Settings.tsx:494 +msgid "Opens the threads preferences" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 +msgid "Other account" +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:88 +msgid "Other service" +msgstr "" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:91 +msgid "Other..." +msgstr "" + +#: src/view/screens/NotFound.tsx:42 +#: src/view/screens/NotFound.tsx:45 +msgid "Page not found" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:101 +#: src/view/com/auth/create/Step2.tsx:111 +#: src/view/com/auth/login/LoginForm.tsx:216 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:130 +#: src/view/com/modals/DeleteAccount.tsx:191 +msgid "Password" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:157 +msgid "Password updated" +msgstr "" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28 +msgid "Password updated!" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:121 +msgid "Pictures meant for adults." +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:89 +msgid "Pinned Feeds" +msgstr "" + +#: src/view/com/auth/create/state.ts:116 +msgid "Please choose your handle." +msgstr "" + +#: src/view/com/auth/create/state.ts:109 +msgid "Please choose your password." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:67 +msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed." +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:140 +msgid "Please enter a unique name for this App Password or use our randomly generated one." +msgstr "" + +#: src/view/com/auth/create/state.ts:95 +msgid "Please enter your email." +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:180 +msgid "Please enter your password as well:" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +msgid "Please tell us why you think this decision was incorrect." +msgstr "" + +#: src/view/com/composer/Composer.tsx:324 +#: src/view/com/post-thread/PostThread.tsx:216 +#: src/view/screens/PostThread.tsx:77 +msgid "Post" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:375 +msgid "Post hidden" +msgstr "" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:87 +msgid "Post language" +msgstr "" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 +msgid "Post Languages" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:427 +msgid "Post not found" +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:44 +msgid "Potentially Misleading Link" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:128 +msgid "Previous image" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:186 +msgid "Primary Language" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:91 +msgid "Prioritize Your Follows" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:75 +msgid "Privacy" +msgstr "" + +#: src/view/screens/PrivacyPolicy.tsx:29 +msgid "Privacy Policy" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:190 +msgid "Processing..." +msgstr "" + +#: src/view/shell/bottom-bar/BottomBar.tsx:237 +#: src/view/shell/Drawer.tsx:72 +#: src/view/shell/Drawer.tsx:533 +#: src/view/shell/Drawer.tsx:534 +msgid "Profile" +msgstr "" + +#: src/view/screens/Settings.tsx:789 +msgid "Protect your account by verifying your email." +msgstr "" + +#: src/view/screens/ModerationModlists.tsx:61 +msgid "Public, shareable lists of users to mute or block in bulk." +msgstr "" + +#: src/view/screens/Lists.tsx:61 +msgid "Public, shareable lists which can drive feeds." +msgstr "" + +#: src/view/com/modals/Repost.tsx:52 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 +msgid "Quote post" +msgstr "" + +#: src/view/com/modals/Repost.tsx:56 +msgid "Quote Post" +msgstr "" + +#: src/view/com/modals/EditImage.tsx:236 +msgid "Ratios" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:73 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:50 +#~ msgid "Recommended" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116 +msgid "Recommended Feeds" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180 +msgid "Recommended Users" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/SelfLabel.tsx:83 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/com/util/UserAvatar.tsx:278 +#: src/view/com/util/UserBanner.tsx:89 +msgid "Remove" +msgstr "" + +#: src/view/com/feeds/FeedSourceCard.tsx:108 +msgid "Remove {0} from my feeds?" +msgstr "" + +#: src/view/com/util/AccountDropdownBtn.tsx:22 +msgid "Remove account" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:130 +msgid "Remove feed" +msgstr "" + +#: src/view/com/feeds/FeedSourceCard.tsx:107 +#: src/view/screens/ProfileFeed.tsx:280 +msgid "Remove from my feeds" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:167 +msgid "Remove image" +msgstr "" + +#: src/view/com/composer/ExternalEmbed.tsx:70 +msgid "Remove image preview" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:131 +msgid "Remove this feed from your saved feeds?" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:199 +#: src/view/com/modals/UserAddRemoveLists.tsx:136 +msgid "Removed from list" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:74 +msgid "Replies to this thread are disabled" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:135 +msgid "Reply Filters" +msgstr "" + +#: src/view/com/modals/report/Modal.tsx:166 +msgid "Report {collectionName}" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:380 +msgid "Report Account" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:300 +msgid "Report feed" +msgstr "" + +#: src/view/screens/ProfileList.tsx:448 +msgid "Report List" +msgstr "" + +#: src/view/com/modals/report/SendReportButton.tsx:37 +#: src/view/com/util/forms/PostDropdownBtn.tsx:162 +msgid "Report post" +msgstr "" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Repost" +msgstr "" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105 +msgid "Repost or quote post" +msgstr "" + +#: src/view/screens/PostRepostedBy.tsx:27 +msgid "Reposted by" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:181 +#: src/view/com/modals/ChangeEmail.tsx:183 +msgid "Request Change" +msgstr "" + +#: src/view/screens/Moderation.tsx:188 +#~ msgid "Request to limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:382 +#~ msgid "Require alt text before posting" +#~ msgstr "" + +#: src/view/com/auth/create/Step2.tsx:53 +msgid "Required for this provider" +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:108 +msgid "Reset code" +msgstr "" + +#: src/view/screens/Settings.tsx:686 +msgid "Reset onboarding state" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:98 +msgid "Reset password" +msgstr "" + +#: src/view/screens/Settings.tsx:676 +msgid "Reset preferences state" +msgstr "" + +#: src/view/screens/Settings.tsx:684 +msgid "Resets the onboarding state" +msgstr "" + +#: src/view/screens/Settings.tsx:674 +msgid "Resets the preferences state" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:167 +#: src/view/com/auth/create/CreateAccount.tsx:171 +#: src/view/com/auth/login/LoginForm.tsx:258 +#: src/view/com/auth/login/LoginForm.tsx:261 +#: src/view/com/util/error/ErrorMessage.tsx:55 +#: src/view/com/util/error/ErrorScreen.tsx:65 +msgid "Retry" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:169 +#~ msgid "Retry change handle" +#~ msgstr "" + +#: src/view/com/modals/AltImage.tsx:114 +#: src/view/com/modals/BirthDateSettings.tsx:93 +#: src/view/com/modals/BirthDateSettings.tsx:96 +#: src/view/com/modals/ChangeHandle.tsx:173 +#: src/view/com/modals/CreateOrEditList.tsx:249 +#: src/view/com/modals/CreateOrEditList.tsx:257 +#: src/view/com/modals/EditProfile.tsx:223 +msgid "Save" +msgstr "" + +#: src/view/com/modals/AltImage.tsx:105 +msgid "Save alt text" +msgstr "" + +#: src/view/com/modals/UserAddRemoveLists.tsx:212 +#~ msgid "Save changes" +#~ msgstr "" + +#: src/view/com/modals/EditProfile.tsx:231 +msgid "Save Changes" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:170 +msgid "Save handle change" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:144 +msgid "Save image crop" +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:122 +msgid "Saved Feeds" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:75 +#: src/view/com/util/forms/SearchInput.tsx:64 +#: src/view/screens/Search/Search.tsx:381 +#: src/view/screens/Search/Search.tsx:533 +#: src/view/shell/bottom-bar/BottomBar.tsx:146 +#: src/view/shell/desktop/LeftNav.tsx:323 +#: src/view/shell/desktop/Search.tsx:161 +#: src/view/shell/desktop/Search.tsx:170 +#: src/view/shell/Drawer.tsx:351 +#: src/view/shell/Drawer.tsx:352 +msgid "Search" +msgstr "" + +#: src/view/screens/Search/Search.tsx:390 +msgid "Search for posts and users." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:110 +msgid "Security Step Required" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:29 +msgid "See what's next" +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:75 +msgid "Select Bluesky Social" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:117 +msgid "Select from an existing account" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:143 +msgid "Select service" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:280 +msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown." +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:97 +msgid "Select your app language for the default text to display in the app" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:189 +msgid "Select your preferred language for translations in your feed." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:188 +msgid "Send Confirmation Email" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:127 +msgid "Send email" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:138 +msgid "Send Email" +msgstr "" + +#: src/view/shell/Drawer.tsx:284 +#: src/view/shell/Drawer.tsx:305 +msgid "Send feedback" +msgstr "" + +#: src/view/com/modals/report/SendReportButton.tsx:45 +msgid "Send Report" +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:78 +msgid "Set new password" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:216 +msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:113 +msgid "Set this setting to \"No\" to hide all replies from your feed." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:182 +msgid "Set this setting to \"No\" to hide all reposts from your feed." +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:116 +msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:252 +msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." +msgstr "" + +#: src/view/screens/Settings.tsx:277 +#: src/view/shell/desktop/LeftNav.tsx:435 +#: src/view/shell/Drawer.tsx:554 +#: src/view/shell/Drawer.tsx:555 +msgid "Settings" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:125 +msgid "Sexual activity or erotic nudity." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:314 +#: src/view/com/util/forms/PostDropdownBtn.tsx:126 +#: src/view/screens/ProfileList.tsx:407 +msgid "Share" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:312 +msgid "Share feed" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:276 +#~ msgid "Share link" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:316 +msgid "Show" +msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:114 +msgid "Show anyway" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:249 +msgid "Show Posts from My Feeds" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:213 +msgid "Show Quote Posts" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:110 +msgid "Show Replies" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:94 +msgid "Show replies by people you follow before all other replies." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:179 +msgid "Show Reposts" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:337 +msgid "Show users" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:98 +#: src/view/com/auth/SplashScreen.tsx:49 +#: src/view/shell/NavSignupCard.tsx:52 +#: src/view/shell/NavSignupCard.tsx:53 +msgid "Sign in" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:52 +#: src/view/com/auth/SplashScreen.web.tsx:84 +msgid "Sign In" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 +msgid "Sign in as {0}" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 +#: src/view/com/auth/login/Login.tsx:116 +msgid "Sign in as..." +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:130 +msgid "Sign into" +msgstr "" + +#: src/view/com/modals/SwitchAccount.tsx:60 +#: src/view/com/modals/SwitchAccount.tsx:63 +msgid "Sign out" +msgstr "" + +#: src/view/shell/NavSignupCard.tsx:43 +#: src/view/shell/NavSignupCard.tsx:44 +#: src/view/shell/NavSignupCard.tsx:46 +msgid "Sign up" +msgstr "" + +#: src/view/shell/NavSignupCard.tsx:36 +msgid "Sign up or sign in to join the conversation" +msgstr "" + +#: src/view/screens/Settings.tsx:327 +msgid "Signed in as" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33 +msgid "Skip" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:69 +msgid "Sort Replies" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:72 +msgid "Sort replies to the same post by:" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:122 +msgid "Square" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:90 +#: src/view/com/modals/ServerInput.tsx:62 +msgid "Staging" +msgstr "" + +#: src/view/screens/Settings.tsx:730 +msgid "Status page" +msgstr "" + +#: src/view/screens/Settings.tsx:666 +msgid "Storybook" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:101 +msgid "Submit" +msgstr ">>>>>>> cb8a33b6 (Fix translations)" + +#: src/view/screens/ProfileList.tsx:597 +msgid "Subscribe" +msgstr "" + +#: src/view/screens/ProfileList.tsx:593 +msgid "Subscribe to this list" +msgstr "" + +#: src/view/screens/Search/Search.tsx:354 +msgid "Suggested Follows" +msgstr "" + +#: src/view/screens/Support.tsx:30 +#: src/view/screens/Support.tsx:33 +msgid "Support" +msgstr "" + +#: src/view/com/modals/SwitchAccount.tsx:111 +msgid "Switch Account" +msgstr "" + +#: src/view/screens/Settings.tsx:398 +#~ msgid "System" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:646 +msgid "System log" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:112 +msgid "Tall" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:84 +msgid "Terms" +msgstr "" + +#: src/view/screens/TermsOfService.tsx:29 +msgid "Terms of Service" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:70 +#: src/view/com/modals/report/InputIssueDetails.tsx:50 +msgid "Text input field" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:282 +msgid "The account will be able to interact with you after unblocking." +msgstr "" + +#: src/view/screens/CommunityGuidelines.tsx:36 +msgid "The Community Guidelines have been moved to <0/>" +msgstr "" + +#: src/view/screens/CopyrightPolicy.tsx:33 +msgid "The Copyright Policy has been moved to <0/>" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:430 +msgid "The post may have been deleted." +msgstr "" + +#: src/view/screens/PrivacyPolicy.tsx:33 +msgid "The Privacy Policy has been moved to <0/>" +msgstr "" + +#: src/view/screens/Support.tsx:36 +msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us." +msgstr "" + +#: src/view/screens/TermsOfService.tsx:33 +msgid "The Terms of Service have been moved to" +msgstr "" + +#: src/view/com/util/ErrorBoundary.tsx:35 +msgid "There was an unexpected issue in the application. Please let us know if this happened to you!" +msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +msgid "This {0} has been labeled." +msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:72 +msgid "This {screenDescription} has been flagged:" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:107 +msgid "This content is not viewable without a Bluesky account." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:113 +msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:61 +msgid "This information is not shared with other users." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:105 +msgid "This is important in case you ever need to change your email or reset your password." +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:55 +msgid "This is the service that keeps you online." +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:56 +msgid "This link is taking you to the following website:" +msgstr "" + +#: src/view/com/post-thread/PostThreadItem.tsx:123 +msgid "This post has been deleted." +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:137 +msgid "This warning is only available for posts with media attached." +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:53 +#: src/view/screens/Settings.tsx:503 +msgid "Thread Preferences" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:113 +msgid "Threaded Mode" +msgstr "" + +#: src/view/com/util/forms/DropdownButton.tsx:230 +msgid "Toggle dropdown" +msgstr "" + +#: src/view/com/modals/EditImage.tsx:271 +msgid "Transformations" +msgstr "" + +#: src/view/com/post-thread/PostThreadItem.tsx:692 +#: src/view/com/post-thread/PostThreadItem.tsx:694 +#: src/view/com/util/forms/PostDropdownBtn.tsx:98 +msgid "Translate" +msgstr "" + +#: src/view/com/util/error/ErrorScreen.tsx:73 +msgid "Try again" +msgstr "" + +#: src/view/screens/ProfileList.tsx:495 +msgid "Un-block list" +msgstr "" + +#: src/view/screens/ProfileList.tsx:480 +msgid "Un-mute list" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:64 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:117 +msgid "Unable to contact your service. Please check your Internet connection." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:442 +#: src/view/com/profile/ProfileHeader.tsx:445 +msgid "Unblock" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:280 +#: src/view/com/profile/ProfileHeader.tsx:364 +msgid "Unblock Account" +msgstr "" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Undo repost" +msgstr "" + +#: src/view/com/auth/create/state.ts:210 +msgid "Unfortunately, you do not meet the requirements to create an account." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:345 +msgid "Unmute Account" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:144 +msgid "Unmute thread" +msgstr "" + +#: src/view/screens/ProfileList.tsx:463 +msgid "Unpin moderation list" +msgstr "" + +#: src/view/com/modals/UserAddRemoveLists.tsx:54 +msgid "Update {displayName} in Lists" +msgstr "" + +#: src/lib/hooks/useOTAUpdate.ts:15 +msgid "Update Available" +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:172 +msgid "Updating..." +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:453 +msgid "Upload a text file to:" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:194 +msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password." +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:513 +msgid "Use default provider" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:150 +msgid "Use this to sign into the other app along with your handle." +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:197 +msgid "Used by:" +msgstr "" + +#: src/view/com/auth/create/Step3.tsx:38 +msgid "User handle" +msgstr "" + +#: src/view/screens/Lists.tsx:58 +msgid "User Lists" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:170 +#: src/view/com/auth/login/LoginForm.tsx:187 +msgid "Username or email address" +msgstr "" + +#: src/view/screens/ProfileList.tsx:767 +msgid "Users" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:115 +msgid "Users followed by <0/>" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "" + +#: src/view/screens/Settings.tsx:750 +msgid "Verify email" +msgstr "" + +#: src/view/screens/Settings.tsx:775 +msgid "Verify my email" +msgstr "" + +#: src/view/screens/Settings.tsx:784 +msgid "Verify My Email" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:205 +#: src/view/com/modals/ChangeEmail.tsx:207 +msgid "Verify New Email" +msgstr "" + +#: src/view/screens/Log.tsx:52 +msgid "View debug entry" +msgstr "" + +#: src/view/com/profile/ProfileSubpageHeader.tsx:128 +msgid "View the avatar" +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:73 +msgid "Visit Site" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:125 +msgid "We're so excited to have you join us!" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:99 +#~ msgid "We're sorry, but this content is not viewable without a Bluesky account." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:105 +#~ msgid "We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +#~ msgstr "" + +#: src/view/screens/Search/Search.tsx:237 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "" + +#: src/view/screens/NotFound.tsx:48 +msgid "We're sorry! We can't find the page you were looking for." +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46 +msgid "Welcome to <0>Bluesky" +msgstr "" + +#: src/view/com/modals/report/Modal.tsx:169 +msgid "What is the issue with this {collectionName}?" +msgstr "" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78 +msgid "Which languages are used in this post?" +msgstr "" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 +msgid "Which languages would you like to see in your algorithmic feeds?" +msgstr "" + +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:43 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:79 +msgid "Who can reply?" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:102 +msgid "Wide" +msgstr "" + +#: src/view/com/composer/Composer.tsx:396 +msgid "Write post" +msgstr "" + +#: src/view/com/composer/Prompt.tsx:33 +msgid "Write your reply" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:192 +#: src/view/screens/PreferencesHomeFeed.tsx:227 +#: src/view/screens/PreferencesHomeFeed.tsx:262 +msgid "Yes" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:106 +msgid "You can change hosting providers at any time." +msgstr "" + +#: src/view/com/auth/login/Login.tsx:158 +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31 +msgid "You can now sign in with your new password." +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:64 +msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer." +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:102 +msgid "You don't have any pinned feeds." +msgstr "" + +#: src/view/screens/Feeds.tsx:383 +msgid "You don't have any saved feeds!" +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:135 +msgid "You don't have any saved feeds." +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:378 +msgid "You have blocked the author or you have been blocked by the author." +msgstr "" + +#: src/view/com/feeds/ProfileFeedgens.tsx:154 +msgid "You have no feeds." +msgstr "" + +#: src/view/com/lists/MyLists.tsx:89 +#: src/view/com/lists/ProfileLists.tsx:158 +msgid "You have no lists." +msgstr "" + +#: src/view/screens/ModerationBlockedAccounts.tsx:131 +msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account." +msgstr "" + +#: src/view/screens/AppPasswords.tsx:86 +msgid "You have not created any app passwords yet. You can create one by pressing the button below." +msgstr "" + +#: src/view/screens/ModerationMutedAccounts.tsx:130 +msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account." +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:81 +msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:43 +msgid "Your account" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:122 +msgid "Your birth date" +msgstr "" + +#: src/view/com/auth/create/state.ts:102 +msgid "Your email appears to be invalid." +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:107 +msgid "Your email has been saved! We'll be in touch soon." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:125 +msgid "Your email has been updated but not verified. As a next step, please verify your new email." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:100 +msgid "Your email has not yet been verified. This is an important security step which we recommend." +msgstr "" + +#: src/view/com/auth/create/Step3.tsx:42 +#: src/view/com/modals/ChangeHandle.tsx:270 +msgid "Your full handle will be" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:53 +msgid "Your hosting provider" +msgstr "" + +#: src/view/screens/Settings.tsx:402 +#: src/view/shell/desktop/RightNav.tsx:127 +#: src/view/shell/Drawer.tsx:644 +msgid "Your invite codes are hidden when logged in using an App Password" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59 +msgid "Your posts, likes, and blocks are public. Mutes are private." +msgstr "" + +#: src/view/com/modals/SwitchAccount.tsx:78 +msgid "Your profile" +msgstr "" + +#: src/view/screens/Moderation.tsx:205 +#~ msgid "Your profile and account will not be visible to anyone visiting the Bluesky app without an account, or to account holders who are not logged in. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +#~ msgid "Your profile and content will not be visible to anyone visiting the Bluesky app without an account. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." +msgstr "" + +#: src/view/com/auth/create/Step3.tsx:28 +msgid "Your user handle" +msgstr "" diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index 7c4d17db8e..3a96561ec4 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -38,12 +38,12 @@ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite msgstr "" #: src/view/screens/Settings.tsx:407 -#: src/view/shell/Drawer.tsx:648 +#: src/view/shell/Drawer.tsx:640 msgid "{invitesAvailable} invite code available" msgstr "" #: src/view/screens/Settings.tsx:409 -#: src/view/shell/Drawer.tsx:650 +#: src/view/shell/Drawer.tsx:642 msgid "{invitesAvailable} invite codes available" msgstr "" @@ -51,6 +51,10 @@ msgstr "" msgid "{message}" msgstr "" +#: src/view/com/threadgate/WhoCanReply.tsx:158 +msgid "<0/> members" +msgstr "" + #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 msgid "<0>Choose your<1>Recommended<2>Feeds" msgstr "" @@ -122,11 +126,11 @@ msgstr "" msgid "Add details to report" msgstr "" -#: src/view/com/composer/Composer.tsx:425 +#: src/view/com/composer/Composer.tsx:432 msgid "Add link card" msgstr "" -#: src/view/com/composer/Composer.tsx:428 +#: src/view/com/composer/Composer.tsx:435 msgid "Add link card:" msgstr "" @@ -134,7 +138,7 @@ msgstr "" msgid "Add the following DNS record to your domain:" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:329 +#: src/view/com/profile/ProfileHeader.tsx:353 msgid "Add to Lists" msgstr "" @@ -180,6 +184,7 @@ msgid "An email has been sent to your previous address, {0}. It includes a confi msgstr "" #: src/view/com/notifications/FeedItem.tsx:236 +#: src/view/com/threadgate/WhoCanReply.tsx:178 msgid "and" msgstr "" @@ -219,7 +224,7 @@ msgstr "" msgid "Are you sure you want to delete the app password \"{name}\"?" msgstr "" -#: src/view/com/composer/Composer.tsx:139 +#: src/view/com/composer/Composer.tsx:141 msgid "Are you sure you'd like to discard this draft?" msgstr "" @@ -245,10 +250,10 @@ msgstr "" #: src/view/com/auth/login/LoginForm.tsx:249 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:45 -#: src/view/com/post-thread/PostThread.tsx:385 -#: src/view/com/post-thread/PostThread.tsx:435 -#: src/view/com/post-thread/PostThread.tsx:443 -#: src/view/com/profile/ProfileHeader.tsx:648 +#: src/view/com/post-thread/PostThread.tsx:392 +#: src/view/com/post-thread/PostThread.tsx:442 +#: src/view/com/post-thread/PostThread.tsx:450 +#: src/view/com/profile/ProfileHeader.tsx:672 msgid "Back" msgstr "" @@ -265,8 +270,8 @@ msgstr "" msgid "Birthday:" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:258 -#: src/view/com/profile/ProfileHeader.tsx:365 +#: src/view/com/profile/ProfileHeader.tsx:282 +#: src/view/com/profile/ProfileHeader.tsx:389 msgid "Block Account" msgstr "" @@ -290,7 +295,7 @@ msgstr "" msgid "Blocked Accounts" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:260 +#: src/view/com/profile/ProfileHeader.tsx:284 msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." msgstr "" @@ -298,7 +303,7 @@ msgstr "" msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours." msgstr "" -#: src/view/com/post-thread/PostThread.tsx:241 +#: src/view/com/post-thread/PostThread.tsx:248 msgid "Blocked post." msgstr "" @@ -326,6 +331,10 @@ msgstr "" msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon." msgstr "" +#: src/view/screens/Moderation.tsx:222 +msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private." +msgstr "" + #: src/view/com/modals/ServerInput.tsx:78 msgid "Bluesky.Social" msgstr "" @@ -344,8 +353,8 @@ msgstr "" msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." msgstr "" -#: src/view/com/composer/Composer.tsx:278 -#: src/view/com/composer/Composer.tsx:281 +#: src/view/com/composer/Composer.tsx:279 +#: src/view/com/composer/Composer.tsx:282 #: src/view/com/modals/AltImage.tsx:127 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 @@ -572,7 +581,7 @@ msgstr "" msgid "Copy link to post" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:314 +#: src/view/com/profile/ProfileHeader.tsx:338 msgid "Copy link to profile" msgstr "" @@ -655,7 +664,7 @@ msgstr "" msgid "Delete this post?" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:233 +#: src/view/com/post-thread/PostThread.tsx:240 msgid "Deleted post." msgstr "" @@ -674,14 +683,18 @@ msgstr "" msgid "Developer Tools" msgstr "" -#: src/view/com/composer/Composer.tsx:140 +#: src/view/com/composer/Composer.tsx:142 msgid "Discard" msgstr "" -#: src/view/com/composer/Composer.tsx:134 +#: src/view/com/composer/Composer.tsx:136 msgid "Discard draft" msgstr "" +#: src/view/screens/Moderation.tsx:204 +msgid "Discourage apps from showing my account to logged-out users" +msgstr "" + #: src/view/screens/Feeds.tsx:405 msgid "Discover new feeds" msgstr "" @@ -705,6 +718,8 @@ msgstr "" #: src/view/com/modals/EditImage.tsx:333 #: src/view/com/modals/ListAddRemoveUsers.tsx:142 #: src/view/com/modals/SelfLabel.tsx:157 +#: src/view/com/modals/Threadgate.tsx:129 +#: src/view/com/modals/Threadgate.tsx:132 #: src/view/com/modals/UserAddRemoveLists.tsx:79 #: src/view/screens/PreferencesHomeFeed.tsx:302 #: src/view/screens/PreferencesThreads.tsx:156 @@ -729,7 +744,7 @@ msgid "Edit list details" msgstr "" #: src/view/screens/Feeds.tsx:367 -#: src/view/screens/SavedFeeds.tsx:85 +#: src/view/screens/SavedFeeds.tsx:84 msgid "Edit My Feeds" msgstr "" @@ -737,11 +752,11 @@ msgstr "" msgid "Edit my profile" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:429 +#: src/view/com/profile/ProfileHeader.tsx:453 msgid "Edit profile" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:432 +#: src/view/com/profile/ProfileHeader.tsx:456 msgid "Edit Profile" msgstr "" @@ -772,7 +787,7 @@ msgstr "" msgid "Enable this setting to only see replies between people you follow." msgstr "" -#: src/view/screens/Profile.tsx:472 +#: src/view/screens/Profile.tsx:471 msgid "End of feed" msgstr "" @@ -804,6 +819,10 @@ msgstr "" msgid "Error:" msgstr "" +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "" + #: src/view/com/lightbox/Lightbox.web.tsx:156 msgid "Expand alt text" msgstr "" @@ -822,16 +841,16 @@ msgid "Feed Preferences" msgstr "" #: src/view/shell/desktop/RightNav.tsx:64 -#: src/view/shell/Drawer.tsx:300 +#: src/view/shell/Drawer.tsx:292 msgid "Feedback" msgstr "" #: src/view/screens/Feeds.tsx:475 #: src/view/screens/Profile.tsx:164 -#: src/view/shell/bottom-bar/BottomBar.tsx:168 -#: src/view/shell/desktop/LeftNav.tsx:341 -#: src/view/shell/Drawer.tsx:463 -#: src/view/shell/Drawer.tsx:464 +#: src/view/shell/bottom-bar/BottomBar.tsx:160 +#: src/view/shell/desktop/LeftNav.tsx:333 +#: src/view/shell/Drawer.tsx:455 +#: src/view/shell/Drawer.tsx:456 msgid "Feeds" msgstr "" @@ -855,7 +874,7 @@ msgstr "" msgid "Fine-tune the discussion threads." msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:514 +#: src/view/com/profile/ProfileHeader.tsx:538 msgid "Follow" msgstr "" @@ -867,6 +886,10 @@ msgstr "" msgid "Follow some users to get started. We can recommend you more users based on who you find interesting." msgstr "" +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "" + #: src/view/screens/PreferencesHomeFeed.tsx:145 msgid "Followed users only" msgstr "" @@ -875,16 +898,16 @@ msgstr "" msgid "Followers" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:600 +#: src/view/com/profile/ProfileHeader.tsx:624 msgid "following" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:498 +#: src/view/com/profile/ProfileHeader.tsx:522 #: src/view/screens/ProfileFollows.tsx:25 msgid "Following" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:547 +#: src/view/com/profile/ProfileHeader.tsx:571 msgid "Follows you" msgstr "" @@ -920,7 +943,7 @@ msgstr "" #: src/view/com/auth/LoggedOut.tsx:68 #: src/view/com/auth/LoggedOut.tsx:69 #: src/view/com/util/moderation/ScreenHider.tsx:105 -#: src/view/shell/desktop/LeftNav.tsx:106 +#: src/view/shell/desktop/LeftNav.tsx:103 msgid "Go back" msgstr "" @@ -942,7 +965,7 @@ msgid "Handle" msgstr "" #: src/view/shell/desktop/RightNav.tsx:93 -#: src/view/shell/Drawer.tsx:310 +#: src/view/shell/Drawer.tsx:302 msgid "Help" msgstr "" @@ -986,10 +1009,10 @@ msgstr "" #~ msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." #~ msgstr "" -#: src/view/shell/bottom-bar/BottomBar.tsx:124 -#: src/view/shell/desktop/LeftNav.tsx:305 -#: src/view/shell/Drawer.tsx:387 -#: src/view/shell/Drawer.tsx:388 +#: src/view/shell/bottom-bar/BottomBar.tsx:116 +#: src/view/shell/desktop/LeftNav.tsx:297 +#: src/view/shell/Drawer.tsx:379 +#: src/view/shell/Drawer.tsx:380 msgid "Home" msgstr "" @@ -1055,7 +1078,7 @@ msgstr "" msgid "Invite code not accepted. Check that you input it correctly and try again." msgstr "" -#: src/view/shell/Drawer.tsx:629 +#: src/view/shell/Drawer.tsx:621 msgid "Invite codes: {invitesAvailable} available" msgstr "" @@ -1142,8 +1165,8 @@ msgstr "" #~ msgstr "" #: src/view/screens/Moderation.tsx:203 -msgid "Limit the visibility of my account to logged-out users" -msgstr "" +#~ msgid "Limit the visibility of my account to logged-out users" +#~ msgstr "" #: src/view/com/modals/CreateOrEditList.tsx:186 msgid "List Avatar" @@ -1154,18 +1177,18 @@ msgid "List Name" msgstr "" #: src/view/screens/Profile.tsx:165 -#: src/view/shell/desktop/LeftNav.tsx:381 -#: src/view/shell/Drawer.tsx:479 -#: src/view/shell/Drawer.tsx:480 +#: src/view/shell/desktop/LeftNav.tsx:373 +#: src/view/shell/Drawer.tsx:471 +#: src/view/shell/Drawer.tsx:472 msgid "Lists" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:250 -#: src/view/com/post-thread/PostThread.tsx:258 +#: src/view/com/post-thread/PostThread.tsx:257 +#: src/view/com/post-thread/PostThread.tsx:265 msgid "Load more posts" msgstr "" -#: src/view/screens/Notifications.tsx:130 +#: src/view/screens/Notifications.tsx:141 msgid "Load new notifications" msgstr "" @@ -1182,7 +1205,11 @@ msgid "Local dev server" msgstr "" #: src/view/screens/Moderation.tsx:134 -msgid "Logged-out users" +#~ msgid "Logged-out users" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:134 +msgid "Logged-out visibility" msgstr "" #: src/view/com/auth/login/ChooseAccountForm.tsx:133 @@ -1201,6 +1228,14 @@ msgstr "" msgid "Media" msgstr "" +#: src/view/com/threadgate/WhoCanReply.tsx:139 +msgid "mentioned users" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:93 +msgid "Mentioned users" +msgstr "" + #: src/view/screens/Search/Search.tsx:503 msgid "Menu" msgstr "" @@ -1212,9 +1247,9 @@ msgstr "" #: src/view/screens/Moderation.tsx:63 #: src/view/screens/Settings.tsx:563 -#: src/view/shell/desktop/LeftNav.tsx:399 -#: src/view/shell/Drawer.tsx:498 -#: src/view/shell/Drawer.tsx:499 +#: src/view/shell/desktop/LeftNav.tsx:391 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 msgid "Moderation" msgstr "" @@ -1230,7 +1265,7 @@ msgstr "" msgid "More feeds" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:524 +#: src/view/com/profile/ProfileHeader.tsx:548 #: src/view/screens/ProfileFeed.tsx:370 #: src/view/screens/ProfileList.tsx:606 msgid "More options" @@ -1240,7 +1275,7 @@ msgstr "" #~ msgid "More post options" #~ msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:346 +#: src/view/com/profile/ProfileHeader.tsx:370 msgid "Mute Account" msgstr "" @@ -1288,7 +1323,7 @@ msgstr "" msgid "My Feeds" msgstr "" -#: src/view/shell/desktop/LeftNav.tsx:67 +#: src/view/shell/desktop/LeftNav.tsx:64 msgid "My Profile" msgstr "" @@ -1316,11 +1351,11 @@ msgstr "" #: src/view/screens/ProfileFeed.tsx:451 #: src/view/screens/ProfileList.tsx:212 #: src/view/screens/ProfileList.tsx:244 -#: src/view/shell/desktop/LeftNav.tsx:254 +#: src/view/shell/desktop/LeftNav.tsx:246 msgid "New post" msgstr "" -#: src/view/shell/desktop/LeftNav.tsx:264 +#: src/view/shell/desktop/LeftNav.tsx:256 msgid "New Post" msgstr "" @@ -1370,6 +1405,10 @@ msgstr "" msgid "No results found for {query}" msgstr "" +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "" + #: src/view/com/modals/SelfLabel.tsx:136 #~ msgid "Not Applicable" #~ msgstr "" @@ -1379,19 +1418,23 @@ msgid "Not Applicable." msgstr "" #: src/view/screens/Moderation.tsx:227 -msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +#~ msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:229 +msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites." msgstr "" #: src/view/screens/Moderation.tsx:227 #~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." #~ msgstr "" -#: src/view/screens/Notifications.tsx:97 -#: src/view/screens/Notifications.tsx:121 -#: src/view/shell/bottom-bar/BottomBar.tsx:195 -#: src/view/shell/desktop/LeftNav.tsx:363 -#: src/view/shell/Drawer.tsx:424 -#: src/view/shell/Drawer.tsx:425 +#: src/view/screens/Notifications.tsx:108 +#: src/view/screens/Notifications.tsx:132 +#: src/view/shell/bottom-bar/BottomBar.tsx:187 +#: src/view/shell/desktop/LeftNav.tsx:355 +#: src/view/shell/Drawer.tsx:416 +#: src/view/shell/Drawer.tsx:417 msgid "Notifications" msgstr "" @@ -1403,10 +1446,14 @@ msgstr "" msgid "Okay" msgstr "" -#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/composer/Composer.tsx:348 msgid "One or more images is missing alt text." msgstr "" +#: src/view/com/threadgate/WhoCanReply.tsx:100 +msgid "Only {0} can reply." +msgstr "" + #: src/view/com/pager/FeedsTabBarMobile.tsx:79 msgid "Open navigation" msgstr "" @@ -1416,7 +1463,7 @@ msgid "Opens configurable language settings" msgstr "" #: src/view/shell/desktop/RightNav.tsx:146 -#: src/view/shell/Drawer.tsx:630 +#: src/view/shell/Drawer.tsx:622 msgid "Opens list of invite codes" msgstr "" @@ -1489,7 +1536,7 @@ msgstr "" msgid "Pictures meant for adults." msgstr "" -#: src/view/screens/SavedFeeds.tsx:89 +#: src/view/screens/SavedFeeds.tsx:88 msgid "Pinned Feeds" msgstr "" @@ -1522,13 +1569,13 @@ msgstr "" msgid "Please tell us why you think this decision was incorrect." msgstr "" -#: src/view/com/composer/Composer.tsx:324 -#: src/view/com/post-thread/PostThread.tsx:216 -#: src/view/screens/PostThread.tsx:77 +#: src/view/com/composer/Composer.tsx:331 +#: src/view/com/post-thread/PostThread.tsx:223 +#: src/view/screens/PostThread.tsx:78 msgid "Post" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:375 +#: src/view/com/post-thread/PostThread.tsx:382 msgid "Post hidden" msgstr "" @@ -1540,7 +1587,7 @@ msgstr "" msgid "Post Languages" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:427 +#: src/view/com/post-thread/PostThread.tsx:434 msgid "Post not found" msgstr "" @@ -1576,10 +1623,10 @@ msgstr "" msgid "Processing..." msgstr "" -#: src/view/shell/bottom-bar/BottomBar.tsx:237 -#: src/view/shell/Drawer.tsx:72 -#: src/view/shell/Drawer.tsx:533 -#: src/view/shell/Drawer.tsx:534 +#: src/view/shell/bottom-bar/BottomBar.tsx:229 +#: src/view/shell/Drawer.tsx:69 +#: src/view/shell/Drawer.tsx:525 +#: src/view/shell/Drawer.tsx:526 msgid "Profile" msgstr "" @@ -1629,7 +1676,7 @@ msgstr "" msgid "Remove" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:108 +#: src/view/com/feeds/FeedSourceCard.tsx:106 msgid "Remove {0} from my feeds?" msgstr "" @@ -1641,7 +1688,8 @@ msgstr "" msgid "Remove feed" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:107 +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 #: src/view/screens/ProfileFeed.tsx:280 msgid "Remove from my feeds" msgstr "" @@ -1654,6 +1702,10 @@ msgstr "" msgid "Remove image preview" msgstr "" +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:131 msgid "Remove this feed from your saved feeds?" msgstr "" @@ -1667,6 +1719,10 @@ msgstr "" msgid "Replies" msgstr "" +#: src/view/com/threadgate/WhoCanReply.tsx:98 +msgid "Replies to this thread are disabled" +msgstr "" + #: src/view/screens/PreferencesHomeFeed.tsx:135 msgid "Reply Filters" msgstr "" @@ -1675,7 +1731,7 @@ msgstr "" msgid "Report {collectionName}" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:380 +#: src/view/com/profile/ProfileHeader.tsx:404 msgid "Report Account" msgstr "" @@ -1797,12 +1853,12 @@ msgstr "" #: src/view/com/util/forms/SearchInput.tsx:64 #: src/view/screens/Search/Search.tsx:381 #: src/view/screens/Search/Search.tsx:533 -#: src/view/shell/bottom-bar/BottomBar.tsx:146 -#: src/view/shell/desktop/LeftNav.tsx:323 +#: src/view/shell/bottom-bar/BottomBar.tsx:138 +#: src/view/shell/desktop/LeftNav.tsx:315 #: src/view/shell/desktop/Search.tsx:161 #: src/view/shell/desktop/Search.tsx:170 -#: src/view/shell/Drawer.tsx:351 -#: src/view/shell/Drawer.tsx:352 +#: src/view/shell/Drawer.tsx:343 +#: src/view/shell/Drawer.tsx:344 msgid "Search" msgstr "" @@ -1854,8 +1910,8 @@ msgstr "" msgid "Send Email" msgstr "" -#: src/view/shell/Drawer.tsx:284 -#: src/view/shell/Drawer.tsx:305 +#: src/view/shell/Drawer.tsx:276 +#: src/view/shell/Drawer.tsx:297 msgid "Send feedback" msgstr "" @@ -1888,9 +1944,9 @@ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your f msgstr "" #: src/view/screens/Settings.tsx:277 -#: src/view/shell/desktop/LeftNav.tsx:435 -#: src/view/shell/Drawer.tsx:554 -#: src/view/shell/Drawer.tsx:555 +#: src/view/shell/desktop/LeftNav.tsx:427 +#: src/view/shell/Drawer.tsx:546 +#: src/view/shell/Drawer.tsx:547 msgid "Settings" msgstr "" @@ -1898,7 +1954,7 @@ msgstr "" msgid "Sexual activity or erotic nudity." msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:314 +#: src/view/com/profile/ProfileHeader.tsx:338 #: src/view/com/util/forms/PostDropdownBtn.tsx:126 #: src/view/screens/ProfileList.tsx:407 msgid "Share" @@ -1969,8 +2025,8 @@ msgstr "" msgid "Sign into" msgstr "" -#: src/view/com/modals/SwitchAccount.tsx:60 -#: src/view/com/modals/SwitchAccount.tsx:63 +#: src/view/com/modals/SwitchAccount.tsx:64 +#: src/view/com/modals/SwitchAccount.tsx:67 msgid "Sign out" msgstr "" @@ -2038,7 +2094,7 @@ msgstr "" msgid "Support" msgstr "" -#: src/view/com/modals/SwitchAccount.tsx:111 +#: src/view/com/modals/SwitchAccount.tsx:115 msgid "Switch Account" msgstr "" @@ -2067,7 +2123,7 @@ msgstr "" msgid "Text input field" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:282 +#: src/view/com/profile/ProfileHeader.tsx:306 msgid "The account will be able to interact with you after unblocking." msgstr "" @@ -2079,7 +2135,7 @@ msgstr "" msgid "The Copyright Policy has been moved to <0/>" msgstr "" -#: src/view/com/post-thread/PostThread.tsx:430 +#: src/view/com/post-thread/PostThread.tsx:437 msgid "The post may have been deleted." msgstr "" @@ -2131,7 +2187,7 @@ msgstr "" msgid "This link is taking you to the following website:" msgstr "" -#: src/view/com/post-thread/PostThreadItem.tsx:123 +#: src/view/com/post-thread/PostThreadItem.tsx:124 msgid "This post has been deleted." msgstr "" @@ -2156,8 +2212,8 @@ msgstr "" msgid "Transformations" msgstr "" -#: src/view/com/post-thread/PostThreadItem.tsx:692 -#: src/view/com/post-thread/PostThreadItem.tsx:694 +#: src/view/com/post-thread/PostThreadItem.tsx:704 +#: src/view/com/post-thread/PostThreadItem.tsx:706 #: src/view/com/util/forms/PostDropdownBtn.tsx:98 msgid "Translate" msgstr "" @@ -2180,13 +2236,13 @@ msgstr "" msgid "Unable to contact your service. Please check your Internet connection." msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:442 -#: src/view/com/profile/ProfileHeader.tsx:445 +#: src/view/com/profile/ProfileHeader.tsx:466 +#: src/view/com/profile/ProfileHeader.tsx:469 msgid "Unblock" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:280 -#: src/view/com/profile/ProfileHeader.tsx:364 +#: src/view/com/profile/ProfileHeader.tsx:304 +#: src/view/com/profile/ProfileHeader.tsx:388 msgid "Unblock Account" msgstr "" @@ -2198,7 +2254,7 @@ msgstr "" msgid "Unfortunately, you do not meet the requirements to create an account." msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:345 +#: src/view/com/profile/ProfileHeader.tsx:369 msgid "Unmute Account" msgstr "" @@ -2259,6 +2315,18 @@ msgstr "" msgid "Users" msgstr "" +#: src/view/com/threadgate/WhoCanReply.tsx:143 +msgid "users followed by <0/>" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:115 +#~ msgid "Users followed by <0/>" +#~ msgstr "" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "" + #: src/view/screens/Settings.tsx:750 msgid "Verify email" msgstr "" @@ -2324,11 +2392,20 @@ msgstr "" msgid "Which languages would you like to see in your algorithmic feeds?" msgstr "" +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:79 +#~ msgid "Who can reply?" +#~ msgstr "" + #: src/view/com/modals/crop-image/CropImage.web.tsx:102 msgid "Wide" msgstr "" -#: src/view/com/composer/Composer.tsx:396 +#: src/view/com/composer/Composer.tsx:403 msgid "Write post" msgstr "" @@ -2367,7 +2444,7 @@ msgstr "" msgid "You don't have any saved feeds." msgstr "" -#: src/view/com/post-thread/PostThread.tsx:378 +#: src/view/com/post-thread/PostThread.tsx:385 msgid "You have blocked the author or you have been blocked by the author." msgstr "" @@ -2431,7 +2508,7 @@ msgstr "" #: src/view/screens/Settings.tsx:402 #: src/view/shell/desktop/RightNav.tsx:127 -#: src/view/shell/Drawer.tsx:644 +#: src/view/shell/Drawer.tsx:636 msgid "Your invite codes are hidden when logged in using an App Password" msgstr "" @@ -2439,7 +2516,7 @@ msgstr "" msgid "Your posts, likes, and blocks are public. Mutes are private." msgstr "" -#: src/view/com/modals/SwitchAccount.tsx:78 +#: src/view/com/modals/SwitchAccount.tsx:82 msgid "Your profile" msgstr "" @@ -2452,8 +2529,8 @@ msgstr "" #~ msgstr "" #: src/view/screens/Moderation.tsx:220 -msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." -msgstr "" +#~ msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." +#~ msgstr "" #: src/view/com/auth/create/Step3.tsx:28 msgid "Your user handle" diff --git a/src/locale/locales/es/messages.po b/src/locale/locales/es/messages.po new file mode 100644 index 0000000000..04aef65a18 --- /dev/null +++ b/src/locale/locales/es/messages.po @@ -0,0 +1,2479 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2023-11-06 12:28-0800\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: es\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/view/screens/Profile.tsx:214 +#~ msgid "- end of feed -" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:138 +#~ msgid ". This warning is only available for posts with media attached." +#~ msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:158 +msgid "{0, plural, one {# invite code available} other {# invite codes available}}" +msgstr "" + +#: src/view/com/modals/Repost.tsx:44 +msgid "{0}" +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:176 +msgid "{0} {purposeLabel} List" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:141 +msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" +msgstr "" + +#: src/view/screens/Settings.tsx:407 +#: src/view/shell/Drawer.tsx:648 +msgid "{invitesAvailable} invite code available" +msgstr "" + +#: src/view/screens/Settings.tsx:409 +#: src/view/shell/Drawer.tsx:650 +msgid "{invitesAvailable} invite codes available" +msgstr "" + +#: src/view/screens/Search/Search.tsx:87 +msgid "{message}" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:130 +msgid "<0/> members" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 +msgid "<0>Choose your<1>Recommended<2>Feeds" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some<1>Recommended<2>Users" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:132 +#~ msgid "<0>Here is your app password. Use this to sign into the other app along with your handle." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: This setting may not be respected by third-party apps that display Bluesky content." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting." +#~ msgstr "" + +#: src/lib/hooks/useOTAUpdate.ts:16 +msgid "A new version of the app is available. Please update to continue using the app." +msgstr "" + +#: src/view/com/modals/EditImage.tsx:299 +#: src/view/screens/Settings.tsx:417 +msgid "Accessibility" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/screens/Settings.tsx:286 +msgid "Account" +msgstr "" + +#: src/view/com/util/AccountDropdownBtn.tsx:41 +msgid "Account options" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/screens/ProfileList.tsx:783 +msgid "Add" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:56 +msgid "Add a content warning" +msgstr "" + +#: src/view/screens/ProfileList.tsx:773 +msgid "Add a user to this list" +msgstr "" + +#: src/view/screens/Settings.tsx:355 +#: src/view/screens/Settings.tsx:364 +msgid "Add account" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:119 +#: src/view/com/composer/photos/Gallery.tsx:180 +msgid "Add alt text" +msgstr "" + +#: src/view/com/modals/report/InputIssueDetails.tsx:41 +#: src/view/com/modals/report/Modal.tsx:191 +msgid "Add details" +msgstr "" + +#: src/view/com/modals/report/Modal.tsx:194 +msgid "Add details to report" +msgstr "" + +#: src/view/com/composer/Composer.tsx:425 +msgid "Add link card" +msgstr "" + +#: src/view/com/composer/Composer.tsx:428 +msgid "Add link card:" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:415 +msgid "Add the following DNS record to your domain:" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:329 +msgid "Add to Lists" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:280 +msgid "Add to my feeds" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:191 +#: src/view/com/modals/UserAddRemoveLists.tsx:128 +msgid "Added to list" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:164 +msgid "Adjust the number of likes a reply must have to be shown in your feed." +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:75 +msgid "Adult Content" +msgstr "" + +#: src/view/screens/Settings.tsx:569 +msgid "Advanced" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:130 +msgid "ALT" +msgstr "" + +#: src/view/com/modals/EditImage.tsx:315 +msgid "Alt text" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:209 +msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:110 +msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:119 +msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below." +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:236 +msgid "and" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:94 +msgid "App Language" +msgstr "" + +#: src/view/screens/Settings.tsx:589 +msgid "App passwords" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:186 +msgid "App Passwords" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:65 +msgid "Appeal Decision" +msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:51 +msgid "Appeal this decision" +msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:55 +msgid "Appeal this decision." +msgstr "" + +#: src/view/screens/Settings.tsx:432 +msgid "Appearance" +msgstr "" + +#: src/view/screens/Moderation.tsx:206 +#~ msgid "Apps that respect this setting, including the official Bluesky app and bsky.app website, won't show your content to logged out users." +#~ msgstr "" + +#: src/view/screens/AppPasswords.tsx:223 +msgid "Are you sure you want to delete the app password \"{name}\"?" +msgstr "" + +#: src/view/com/composer/Composer.tsx:139 +msgid "Are you sure you'd like to discard this draft?" +msgstr "" + +#: src/view/screens/ProfileList.tsx:375 +msgid "Are you sure?" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:185 +msgid "Are you sure? This cannot be undone." +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:123 +msgid "Artistic or non-erotic nudity." +msgstr "" + +#: src/view/screens/Moderation.tsx:189 +#~ msgid "Ask apps to limit the visibility of my account" +#~ msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:145 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:166 +#: src/view/com/auth/login/LoginForm.tsx:249 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:45 +#: src/view/com/post-thread/PostThread.tsx:385 +#: src/view/com/post-thread/PostThread.tsx:435 +#: src/view/com/post-thread/PostThread.tsx:443 +#: src/view/com/profile/ProfileHeader.tsx:648 +msgid "Back" +msgstr "" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:131 +#: src/view/com/modals/BirthDateSettings.tsx:72 +msgid "Birthday" +msgstr "" + +#: src/view/screens/Settings.tsx:312 +msgid "Birthday:" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:258 +#: src/view/com/profile/ProfileHeader.tsx:365 +msgid "Block Account" +msgstr "" + +#: src/view/screens/ProfileList.tsx:545 +msgid "Block accounts" +msgstr "" + +#: src/view/screens/ProfileList.tsx:495 +msgid "Block list" +msgstr "" + +#: src/view/screens/ProfileList.tsx:330 +msgid "Block these accounts?" +msgstr "" + +#: src/view/screens/Moderation.tsx:121 +msgid "Blocked accounts" +msgstr "" + +#: src/view/screens/ModerationBlockedAccounts.tsx:106 +msgid "Blocked Accounts" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:260 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "" + +#: src/view/screens/ModerationBlockedAccounts.tsx:114 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours." +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:241 +msgid "Blocked post." +msgstr "" + +#: src/view/screens/ProfileList.tsx:332 +msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:26 +msgid "Bluesky" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80 +msgid "Bluesky is flexible." +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69 +msgid "Bluesky is open." +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56 +msgid "Bluesky is public." +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:70 +msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon." +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:78 +msgid "Bluesky.Social" +msgstr "" + +#: src/view/screens/Settings.tsx:718 +msgid "Build version {0} {1}" +msgstr "" + +#: src/view/com/composer/photos/OpenCameraBtn.tsx:60 +#: src/view/com/util/UserAvatar.tsx:217 +#: src/view/com/util/UserBanner.tsx:38 +msgid "Camera" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:214 +msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." +msgstr "" + +#: src/view/com/composer/Composer.tsx:278 +#: src/view/com/composer/Composer.tsx:281 +#: src/view/com/modals/AltImage.tsx:127 +#: src/view/com/modals/ChangeEmail.tsx:218 +#: src/view/com/modals/ChangeEmail.tsx:220 +#: src/view/com/modals/Confirm.tsx:88 +#: src/view/com/modals/CreateOrEditList.tsx:267 +#: src/view/com/modals/CreateOrEditList.tsx:272 +#: src/view/com/modals/DeleteAccount.tsx:150 +#: src/view/com/modals/DeleteAccount.tsx:223 +#: src/view/com/modals/EditImage.tsx:323 +#: src/view/com/modals/EditProfile.tsx:248 +#: src/view/com/modals/LinkWarning.tsx:85 +#: src/view/com/modals/Repost.tsx:73 +#: src/view/com/modals/Waitlist.tsx:136 +#: src/view/screens/Search/Search.tsx:558 +#: src/view/shell/desktop/Search.tsx:182 +msgid "Cancel" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:146 +#: src/view/com/modals/DeleteAccount.tsx:219 +msgid "Cancel account deletion" +msgstr "" + +#: src/view/com/modals/AltImage.tsx:122 +msgid "Cancel add image alt text" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:149 +msgid "Cancel change handle" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:134 +msgid "Cancel image crop" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:243 +msgid "Cancel profile editing" +msgstr "" + +#: src/view/com/modals/Repost.tsx:64 +msgid "Cancel quote post" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:87 +#: src/view/shell/desktop/Search.tsx:178 +msgid "Cancel search" +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:132 +msgid "Cancel waitlist signup" +msgstr "" + +#: src/view/screens/Settings.tsx:306 +msgid "Change" +msgstr "" + +#: src/view/screens/Settings.tsx:601 +#: src/view/screens/Settings.tsx:610 +msgid "Change handle" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:161 +msgid "Change Handle" +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:133 +msgid "Change my email" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:109 +msgid "Change Your Email" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121 +msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds." +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185 +msgid "Check out some recommended users. Follow them to see similar users." +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:163 +msgid "Check your inbox for an email with the confirmation code to enter below:" +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:38 +msgid "Choose Service" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83 +msgid "Choose the algorithms that power your experience with custom feeds." +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:65 +#~ msgid "Choose your" +#~ msgstr "" + +#: src/view/com/auth/create/Step2.tsx:106 +msgid "Choose your password" +msgstr "" + +#: src/view/screens/Settings.tsx:694 +msgid "Clear all legacy storage data" +msgstr "" + +#: src/view/screens/Settings.tsx:696 +msgid "Clear all legacy storage data (restart after this)" +msgstr "" + +#: src/view/screens/Settings.tsx:706 +msgid "Clear all storage data" +msgstr "" + +#: src/view/screens/Settings.tsx:708 +msgid "Clear all storage data (restart after this)" +msgstr "" + +#: src/view/com/util/forms/SearchInput.tsx:73 +#: src/view/screens/Search/Search.tsx:543 +msgid "Clear search query" +msgstr "" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38 +msgid "Close alert" +msgstr "" + +#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33 +msgid "Close bottom drawer" +msgstr "" + +#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26 +msgid "Close image" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:112 +msgid "Close image viewer" +msgstr "" + +#: src/view/shell/index.web.tsx:49 +msgid "Close navigation footer" +msgstr "" + +#: src/view/screens/CommunityGuidelines.tsx:32 +msgid "Community Guidelines" +msgstr "" + +#: src/view/com/composer/Prompt.tsx:24 +msgid "Compose reply" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:98 +#: src/view/com/modals/Confirm.tsx:75 +#: src/view/com/modals/SelfLabel.tsx:154 +#: src/view/com/modals/VerifyEmail.tsx:217 +#: src/view/screens/PreferencesHomeFeed.tsx:299 +#: src/view/screens/PreferencesThreads.tsx:153 +msgid "Confirm" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:193 +#: src/view/com/modals/ChangeEmail.tsx:195 +msgid "Confirm Change" +msgstr "" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34 +msgid "Confirm content language settings" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:209 +msgid "Confirm delete account" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:157 +#: src/view/com/modals/DeleteAccount.tsx:176 +#: src/view/com/modals/VerifyEmail.tsx:151 +msgid "Confirmation code" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:178 +#: src/view/com/auth/login/LoginForm.tsx:268 +msgid "Connecting..." +msgstr "" + +#: src/view/screens/Moderation.tsx:79 +msgid "Content filtering" +msgstr "" + +#: src/view/com/modals/ContentFilteringSettings.tsx:44 +msgid "Content Filtering" +msgstr "" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74 +#: src/view/screens/LanguageSettings.tsx:277 +msgid "Content Languages" +msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:69 +msgid "Content Warning" +msgstr "" + +#: src/view/com/composer/labels/LabelsBtn.tsx:31 +msgid "Content warnings" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209 +msgid "Continue" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:193 +#: src/view/com/modals/InviteCodes.tsx:179 +msgid "Copied" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:186 +msgid "Copy" +msgstr "" + +#: src/view/screens/ProfileList.tsx:407 +msgid "Copy link to list" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:126 +msgid "Copy link to post" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:314 +msgid "Copy link to profile" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:112 +msgid "Copy post text" +msgstr "" + +#: src/view/screens/CopyrightPolicy.tsx:29 +msgid "Copyright Policy" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:103 +msgid "Could not load feed" +msgstr "" + +#: src/view/screens/ProfileList.tsx:860 +msgid "Could not load list" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:41 +msgid "Create a new account" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:124 +msgid "Create Account" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:38 +msgid "Create new account" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:248 +msgid "Created {0}" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:387 +#: src/view/com/modals/ServerInput.tsx:102 +msgid "Custom domain" +msgstr "" + +#: src/view/screens/Settings.tsx:615 +msgid "Danger Zone" +msgstr "" + +#: src/view/screens/Settings.tsx:411 +#~ msgid "Dark" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:622 +msgid "Delete account" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:83 +msgid "Delete Account" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:221 +#: src/view/screens/AppPasswords.tsx:241 +msgid "Delete app password" +msgstr "" + +#: src/view/screens/ProfileList.tsx:374 +#: src/view/screens/ProfileList.tsx:434 +msgid "Delete List" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:212 +msgid "Delete my account" +msgstr "" + +#: src/view/screens/Settings.tsx:632 +msgid "Delete my account…" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:180 +msgid "Delete post" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:184 +msgid "Delete this post?" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:233 +msgid "Deleted post." +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:218 +#: src/view/com/modals/CreateOrEditList.tsx:234 +#: src/view/com/modals/EditProfile.tsx:197 +#: src/view/com/modals/EditProfile.tsx:209 +msgid "Description" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:96 +msgid "Dev Server" +msgstr "" + +#: src/view/screens/Settings.tsx:637 +msgid "Developer Tools" +msgstr "" + +#: src/view/com/composer/Composer.tsx:140 +msgid "Discard" +msgstr "" + +#: src/view/com/composer/Composer.tsx:134 +msgid "Discard draft" +msgstr "" + +#: src/view/screens/Feeds.tsx:405 +msgid "Discover new feeds" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:191 +msgid "Display name" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:179 +msgid "Display Name" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:485 +msgid "Domain verified!" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/ContentFilteringSettings.tsx:88 +#: src/view/com/modals/ContentFilteringSettings.tsx:96 +#: src/view/com/modals/crop-image/CropImage.web.tsx:152 +#: src/view/com/modals/EditImage.tsx:333 +#: src/view/com/modals/ListAddRemoveUsers.tsx:142 +#: src/view/com/modals/SelfLabel.tsx:157 +#: src/view/com/modals/UserAddRemoveLists.tsx:79 +#: src/view/screens/PreferencesHomeFeed.tsx:302 +#: src/view/screens/PreferencesThreads.tsx:156 +msgid "Done" +msgstr "" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42 +msgid "Done{extraText}" +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:94 +msgid "Each code works once. You'll receive more invite codes periodically." +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:144 +#: src/view/com/modals/EditImage.tsx:207 +msgid "Edit image" +msgstr "" + +#: src/view/screens/ProfileList.tsx:422 +msgid "Edit list details" +msgstr "" + +#: src/view/screens/Feeds.tsx:367 +#: src/view/screens/SavedFeeds.tsx:85 +msgid "Edit My Feeds" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:151 +msgid "Edit my profile" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:429 +msgid "Edit profile" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:432 +msgid "Edit Profile" +msgstr "" + +#: src/view/screens/Feeds.tsx:330 +msgid "Edit Saved Feeds" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:90 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:148 +#: src/view/com/modals/ChangeEmail.tsx:141 +#: src/view/com/modals/Waitlist.tsx:88 +msgid "Email" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:81 +msgid "Email address" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:111 +msgid "Email Updated" +msgstr "" + +#: src/view/screens/Settings.tsx:290 +msgid "Email:" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:138 +msgid "Enable this setting to only see replies between people you follow." +msgstr "" + +#: src/view/screens/Profile.tsx:472 +msgid "End of feed" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:71 +msgid "Enter the address of your provider:" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:369 +msgid "Enter the domain you want to use" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:101 +msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password." +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:86 +msgid "Enter your email address" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:117 +msgid "Enter your new email address below." +msgstr "" + +#: src/view/com/auth/login/Login.tsx:99 +msgid "Enter your username and password" +msgstr "" + +#: src/view/screens/Search/Search.tsx:105 +msgid "Error:" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:156 +msgid "Expand alt text" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 +msgid "Failed to load recommended feeds" +msgstr "" + +#: src/view/screens/Feeds.tsx:559 +msgid "Feed offline" +msgstr "" + +#: src/view/com/feeds/FeedPage.tsx:140 +msgid "Feed Preferences" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:64 +#: src/view/shell/Drawer.tsx:300 +msgid "Feedback" +msgstr "" + +#: src/view/screens/Feeds.tsx:475 +#: src/view/shell/bottom-bar/BottomBar.tsx:168 +#: src/view/shell/desktop/LeftNav.tsx:341 +#: src/view/shell/Drawer.tsx:463 +#: src/view/shell/Drawer.tsx:464 +msgid "Feeds" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57 +msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:156 +msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150 +msgid "Finding similar accounts..." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:102 +msgid "Fine-tune the content you see on your home screen." +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:60 +msgid "Fine-tune the discussion threads." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:514 +msgid "Follow" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:42 +#~ msgid "Follow some" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64 +msgid "Follow some users to get started. We can recommend you more users based on who you find interesting." +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:145 +msgid "Followed users only" +msgstr "" + +#: src/view/screens/ProfileFollowers.tsx:25 +msgid "Followers" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:600 +msgid "following" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:498 +#: src/view/screens/ProfileFollows.tsx:25 +msgid "Following" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:547 +msgid "Follows you" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:107 +msgid "For security reasons, we'll need to send a confirmation code to your email address." +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:207 +msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:231 +msgid "Forgot" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:228 +msgid "Forgot password" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:127 +#: src/view/com/auth/login/Login.tsx:143 +msgid "Forgot Password" +msgstr "" + +#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43 +msgid "Gallery" +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:175 +msgid "Get Started" +msgstr "" + +#: src/view/com/auth/LoggedOut.tsx:68 +#: src/view/com/auth/LoggedOut.tsx:69 +#: src/view/com/util/moderation/ScreenHider.tsx:105 +#: src/view/shell/desktop/LeftNav.tsx:106 +msgid "Go back" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:112 +#: src/view/screens/ProfileFeed.tsx:117 +#: src/view/screens/ProfileList.tsx:869 +#: src/view/screens/ProfileList.tsx:874 +msgid "Go Back" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:278 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:163 +msgid "Go to next" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:265 +msgid "Handle" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:93 +#: src/view/shell/Drawer.tsx:310 +msgid "Help" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:148 +msgid "Here is your app password." +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:316 +msgid "Hide" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:308 +msgid "Hide user list" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:102 +#~ msgid "Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:110 +msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:104 +msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:101 +msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:95 +msgid "Hmm, we're having trouble finding this feed. It may have been deleted." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:87 +#~ msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +#~ msgstr "" + +#: src/view/shell/bottom-bar/BottomBar.tsx:124 +#: src/view/shell/desktop/LeftNav.tsx:305 +#: src/view/shell/Drawer.tsx:387 +#: src/view/shell/Drawer.tsx:388 +msgid "Home" +msgstr "" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:99 +#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/Settings.tsx:481 +msgid "Home Feed Preferences" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:114 +msgid "Hosting provider" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:76 +#: src/view/com/auth/create/Step1.tsx:81 +msgid "Hosting provider address" +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:200 +msgid "I have a code" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:281 +msgid "I have my own domain" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:127 +msgid "If none are selected, suitable for all ages." +msgstr "" + +#: src/view/com/modals/AltImage.tsx:96 +msgid "Image alt text" +msgstr "" + +#: src/view/com/util/UserAvatar.tsx:304 +#: src/view/com/util/UserBanner.tsx:116 +msgid "Image options" +msgstr "" + +#: src/view/com/search/Suggestions.tsx:104 +#: src/view/com/search/Suggestions.tsx:115 +#~ msgid "In Your Network" +#~ msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:113 +msgid "Invalid username or password" +msgstr "" + +#: src/view/screens/Settings.tsx:383 +msgid "Invite" +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:91 +#: src/view/screens/Settings.tsx:371 +msgid "Invite a Friend" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:57 +msgid "Invite code" +msgstr "" + +#: src/view/com/auth/create/state.ts:136 +msgid "Invite code not accepted. Check that you input it correctly and try again." +msgstr "" + +#: src/view/shell/Drawer.tsx:629 +msgid "Invite codes: {invitesAvailable} available" +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:67 +msgid "Join the waitlist" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:68 +#: src/view/com/auth/create/Step2.tsx:72 +msgid "Join the waitlist." +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:124 +msgid "Join Waitlist" +msgstr "" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:104 +msgid "Language selection" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:88 +msgid "Language Settings" +msgstr "" + +#: src/view/screens/Settings.tsx:541 +msgid "Languages" +msgstr "" + +#: src/view/com/util/moderation/PostAlerts.tsx:47 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65 +#: src/view/com/util/moderation/ScreenHider.tsx:88 +msgid "Learn More" +msgstr "" + +#: src/view/com/util/moderation/ContentHider.tsx:83 +#: src/view/com/util/moderation/PostAlerts.tsx:40 +#: src/view/com/util/moderation/PostHider.tsx:76 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49 +#: src/view/com/util/moderation/ScreenHider.tsx:85 +msgid "Learn more about this warning" +msgstr "" + +#: src/view/screens/Moderation.tsx:239 +msgid "Learn more about what is public on Bluesky." +msgstr "" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82 +msgid "Leave them all unchecked to see any language." +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:49 +msgid "Leaving Bluesky" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:128 +#: src/view/com/auth/login/Login.tsx:144 +msgid "Let's get your password reset!" +msgstr "" + +#: src/view/com/util/UserAvatar.tsx:241 +#: src/view/com/util/UserBanner.tsx:60 +msgid "Library" +msgstr "" + +#: src/view/screens/Settings.tsx:405 +#~ msgid "Light" +#~ msgstr "" + +#: src/view/screens/ProfileFeed.tsx:643 +msgid "Like this feed" +msgstr "" + +#: src/view/screens/PostLikedBy.tsx:27 +#: src/view/screens/ProfileFeedLikedBy.tsx:27 +msgid "Liked by" +msgstr "" + +#: src/view/screens/Moderation.tsx:203 +#~ msgid "Limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:203 +msgid "Limit the visibility of my account to logged-out users" +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:186 +msgid "List Avatar" +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:199 +msgid "List Name" +msgstr "" + +#: src/view/shell/desktop/LeftNav.tsx:381 +#: src/view/shell/Drawer.tsx:479 +#: src/view/shell/Drawer.tsx:480 +msgid "Lists" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:250 +#: src/view/com/post-thread/PostThread.tsx:258 +msgid "Load more posts" +msgstr "" + +#: src/view/screens/Notifications.tsx:130 +msgid "Load new notifications" +msgstr "" + +#: src/view/com/feeds/FeedPage.tsx:185 +msgid "Load new posts" +msgstr "" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 +msgid "Loading..." +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:50 +msgid "Local dev server" +msgstr "" + +#: src/view/screens/Moderation.tsx:134 +msgid "Logged-out users" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 +msgid "Login to account that is not listed" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:482 +msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!" +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:63 +msgid "Make sure this is where you intend to go!" +msgstr "" + +#: src/view/screens/Search/Search.tsx:503 +msgid "Menu" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:194 +#: src/view/screens/ProfileFeed.tsx:490 +msgid "Message from server" +msgstr "" + +#: src/view/screens/Moderation.tsx:63 +#: src/view/screens/Settings.tsx:563 +#: src/view/shell/desktop/LeftNav.tsx:399 +#: src/view/shell/Drawer.tsx:498 +#: src/view/shell/Drawer.tsx:499 +msgid "Moderation" +msgstr "" + +#: src/view/screens/Moderation.tsx:93 +msgid "Moderation lists" +msgstr "" + +#: src/view/screens/ModerationModlists.tsx:58 +msgid "Moderation Lists" +msgstr "" + +#: src/view/shell/desktop/Feeds.tsx:53 +msgid "More feeds" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:524 +#: src/view/screens/ProfileFeed.tsx:370 +#: src/view/screens/ProfileList.tsx:606 +msgid "More options" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:158 +#~ msgid "More post options" +#~ msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:346 +msgid "Mute Account" +msgstr "" + +#: src/view/screens/ProfileList.tsx:533 +msgid "Mute accounts" +msgstr "" + +#: src/view/screens/ProfileList.tsx:480 +msgid "Mute list" +msgstr "" + +#: src/view/screens/ProfileList.tsx:293 +msgid "Mute these accounts?" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:144 +msgid "Mute thread" +msgstr "" + +#: src/view/screens/Moderation.tsx:107 +msgid "Muted accounts" +msgstr "" + +#: src/view/screens/ModerationMutedAccounts.tsx:106 +msgid "Muted Accounts" +msgstr "" + +#: src/view/screens/ModerationMutedAccounts.tsx:114 +msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private." +msgstr "" + +#: src/view/screens/ProfileList.tsx:295 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "" + +#: src/view/screens/Moderation.tsx:134 +#~ msgid "My Account" +#~ msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:56 +msgid "My Birthday" +msgstr "" + +#: src/view/screens/Feeds.tsx:363 +msgid "My Feeds" +msgstr "" + +#: src/view/shell/desktop/LeftNav.tsx:67 +msgid "My Profile" +msgstr "" + +#: src/view/screens/Settings.tsx:520 +msgid "My Saved Feeds" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:177 +#: src/view/com/modals/CreateOrEditList.tsx:211 +msgid "Name" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 +msgid "Never lose access to your followers and data." +msgstr "" + +#: src/view/screens/Lists.tsx:76 +#: src/view/screens/ModerationModlists.tsx:78 +msgid "New" +msgstr "" + +#: src/view/com/feeds/FeedPage.tsx:196 +#: src/view/screens/Feeds.tsx:510 +#: src/view/screens/Profile.tsx:389 +#: src/view/screens/ProfileFeed.tsx:451 +#: src/view/screens/ProfileList.tsx:212 +#: src/view/screens/ProfileList.tsx:244 +#: src/view/shell/desktop/LeftNav.tsx:254 +msgid "New post" +msgstr "" + +#: src/view/shell/desktop/LeftNav.tsx:264 +msgid "New Post" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:158 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:174 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:184 +#: src/view/com/auth/login/LoginForm.tsx:281 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:156 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:166 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 +msgid "Next" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:142 +msgid "Next image" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:191 +#: src/view/screens/PreferencesHomeFeed.tsx:226 +#: src/view/screens/PreferencesHomeFeed.tsx:263 +msgid "No" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:636 +#: src/view/screens/ProfileList.tsx:740 +msgid "No description" +msgstr "" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97 +msgid "No result" +msgstr "" + +#: src/view/screens/Feeds.tsx:452 +msgid "No results found for \"{query}\"" +msgstr "" + +#: src/view/com/modals/ListAddUser.tsx:142 +#: src/view/shell/desktop/Search.tsx:112 +#~ msgid "No results found for {0}" +#~ msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:127 +#: src/view/screens/Search/Search.tsx:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:581 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:136 +#~ msgid "Not Applicable" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:135 +msgid "Not Applicable." +msgstr "" + +#: src/view/screens/Moderation.tsx:227 +msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +msgstr "" + +#: src/view/screens/Moderation.tsx:227 +#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." +#~ msgstr "" + +#: src/view/screens/Notifications.tsx:97 +#: src/view/screens/Notifications.tsx:121 +#: src/view/shell/bottom-bar/BottomBar.tsx:195 +#: src/view/shell/desktop/LeftNav.tsx:363 +#: src/view/shell/Drawer.tsx:424 +#: src/view/shell/Drawer.tsx:425 +msgid "Notifications" +msgstr "" + +#: src/view/com/util/ErrorBoundary.tsx:34 +msgid "Oh no!" +msgstr "" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41 +msgid "Okay" +msgstr "" + +#: src/view/com/composer/Composer.tsx:341 +msgid "One or more images is missing alt text." +msgstr "" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:79 +msgid "Open navigation" +msgstr "" + +#: src/view/screens/Settings.tsx:533 +msgid "Opens configurable language settings" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:146 +#: src/view/shell/Drawer.tsx:630 +msgid "Opens list of invite codes" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:279 +msgid "Opens modal for using custom domain" +msgstr "" + +#: src/view/screens/Settings.tsx:558 +msgid "Opens moderation settings" +msgstr "" + +#: src/view/screens/Settings.tsx:514 +msgid "Opens screen with all saved feeds" +msgstr "" + +#: src/view/screens/Settings.tsx:581 +msgid "Opens the app password settings page" +msgstr "" + +#: src/view/screens/Settings.tsx:473 +msgid "Opens the home feed preferences" +msgstr "" + +#: src/view/screens/Settings.tsx:664 +msgid "Opens the storybook page" +msgstr "" + +#: src/view/screens/Settings.tsx:644 +msgid "Opens the system log page" +msgstr "" + +#: src/view/screens/Settings.tsx:494 +msgid "Opens the threads preferences" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 +msgid "Other account" +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:88 +msgid "Other service" +msgstr "" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:91 +msgid "Other..." +msgstr "" + +#: src/view/screens/NotFound.tsx:42 +#: src/view/screens/NotFound.tsx:45 +msgid "Page not found" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:101 +#: src/view/com/auth/create/Step2.tsx:111 +#: src/view/com/auth/login/LoginForm.tsx:216 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:130 +#: src/view/com/modals/DeleteAccount.tsx:191 +msgid "Password" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:157 +msgid "Password updated" +msgstr "" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28 +msgid "Password updated!" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:121 +msgid "Pictures meant for adults." +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:89 +msgid "Pinned Feeds" +msgstr "" + +#: src/view/com/auth/create/state.ts:116 +msgid "Please choose your handle." +msgstr "" + +#: src/view/com/auth/create/state.ts:109 +msgid "Please choose your password." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:67 +msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed." +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:140 +msgid "Please enter a unique name for this App Password or use our randomly generated one." +msgstr "" + +#: src/view/com/auth/create/state.ts:95 +msgid "Please enter your email." +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:180 +msgid "Please enter your password as well:" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +msgid "Please tell us why you think this decision was incorrect." +msgstr "" + +#: src/view/com/composer/Composer.tsx:324 +#: src/view/com/post-thread/PostThread.tsx:216 +#: src/view/screens/PostThread.tsx:77 +msgid "Post" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:375 +msgid "Post hidden" +msgstr "" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:87 +msgid "Post language" +msgstr "" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 +msgid "Post Languages" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:427 +msgid "Post not found" +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:44 +msgid "Potentially Misleading Link" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:128 +msgid "Previous image" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:186 +msgid "Primary Language" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:91 +msgid "Prioritize Your Follows" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:75 +msgid "Privacy" +msgstr "" + +#: src/view/screens/PrivacyPolicy.tsx:29 +msgid "Privacy Policy" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:190 +msgid "Processing..." +msgstr "" + +#: src/view/shell/bottom-bar/BottomBar.tsx:237 +#: src/view/shell/Drawer.tsx:72 +#: src/view/shell/Drawer.tsx:533 +#: src/view/shell/Drawer.tsx:534 +msgid "Profile" +msgstr "" + +#: src/view/screens/Settings.tsx:789 +msgid "Protect your account by verifying your email." +msgstr "" + +#: src/view/screens/ModerationModlists.tsx:61 +msgid "Public, shareable lists of users to mute or block in bulk." +msgstr "" + +#: src/view/screens/Lists.tsx:61 +msgid "Public, shareable lists which can drive feeds." +msgstr "" + +#: src/view/com/modals/Repost.tsx:52 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 +msgid "Quote post" +msgstr "" + +#: src/view/com/modals/Repost.tsx:56 +msgid "Quote Post" +msgstr "" + +#: src/view/com/modals/EditImage.tsx:236 +msgid "Ratios" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:73 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:50 +#~ msgid "Recommended" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116 +msgid "Recommended Feeds" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180 +msgid "Recommended Users" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/SelfLabel.tsx:83 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/com/util/UserAvatar.tsx:278 +#: src/view/com/util/UserBanner.tsx:89 +msgid "Remove" +msgstr "" + +#: src/view/com/feeds/FeedSourceCard.tsx:108 +msgid "Remove {0} from my feeds?" +msgstr "" + +#: src/view/com/util/AccountDropdownBtn.tsx:22 +msgid "Remove account" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:130 +msgid "Remove feed" +msgstr "" + +#: src/view/com/feeds/FeedSourceCard.tsx:107 +#: src/view/screens/ProfileFeed.tsx:280 +msgid "Remove from my feeds" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:167 +msgid "Remove image" +msgstr "" + +#: src/view/com/composer/ExternalEmbed.tsx:70 +msgid "Remove image preview" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:131 +msgid "Remove this feed from your saved feeds?" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:199 +#: src/view/com/modals/UserAddRemoveLists.tsx:136 +msgid "Removed from list" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:74 +msgid "Replies to this thread are disabled" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:135 +msgid "Reply Filters" +msgstr "" + +#: src/view/com/modals/report/Modal.tsx:166 +msgid "Report {collectionName}" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:380 +msgid "Report Account" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:300 +msgid "Report feed" +msgstr "" + +#: src/view/screens/ProfileList.tsx:448 +msgid "Report List" +msgstr "" + +#: src/view/com/modals/report/SendReportButton.tsx:37 +#: src/view/com/util/forms/PostDropdownBtn.tsx:162 +msgid "Report post" +msgstr "" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Repost" +msgstr "" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105 +msgid "Repost or quote post" +msgstr "" + +#: src/view/screens/PostRepostedBy.tsx:27 +msgid "Reposted by" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:181 +#: src/view/com/modals/ChangeEmail.tsx:183 +msgid "Request Change" +msgstr "" + +#: src/view/screens/Moderation.tsx:188 +#~ msgid "Request to limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:382 +#~ msgid "Require alt text before posting" +#~ msgstr "" + +#: src/view/com/auth/create/Step2.tsx:53 +msgid "Required for this provider" +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:108 +msgid "Reset code" +msgstr "" + +#: src/view/screens/Settings.tsx:686 +msgid "Reset onboarding state" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:98 +msgid "Reset password" +msgstr "" + +#: src/view/screens/Settings.tsx:676 +msgid "Reset preferences state" +msgstr "" + +#: src/view/screens/Settings.tsx:684 +msgid "Resets the onboarding state" +msgstr "" + +#: src/view/screens/Settings.tsx:674 +msgid "Resets the preferences state" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:167 +#: src/view/com/auth/create/CreateAccount.tsx:171 +#: src/view/com/auth/login/LoginForm.tsx:258 +#: src/view/com/auth/login/LoginForm.tsx:261 +#: src/view/com/util/error/ErrorMessage.tsx:55 +#: src/view/com/util/error/ErrorScreen.tsx:65 +msgid "Retry" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:169 +#~ msgid "Retry change handle" +#~ msgstr "" + +#: src/view/com/modals/AltImage.tsx:114 +#: src/view/com/modals/BirthDateSettings.tsx:93 +#: src/view/com/modals/BirthDateSettings.tsx:96 +#: src/view/com/modals/ChangeHandle.tsx:173 +#: src/view/com/modals/CreateOrEditList.tsx:249 +#: src/view/com/modals/CreateOrEditList.tsx:257 +#: src/view/com/modals/EditProfile.tsx:223 +msgid "Save" +msgstr "" + +#: src/view/com/modals/AltImage.tsx:105 +msgid "Save alt text" +msgstr "" + +#: src/view/com/modals/UserAddRemoveLists.tsx:212 +#~ msgid "Save changes" +#~ msgstr "" + +#: src/view/com/modals/EditProfile.tsx:231 +msgid "Save Changes" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:170 +msgid "Save handle change" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:144 +msgid "Save image crop" +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:122 +msgid "Saved Feeds" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:75 +#: src/view/com/util/forms/SearchInput.tsx:64 +#: src/view/screens/Search/Search.tsx:381 +#: src/view/screens/Search/Search.tsx:533 +#: src/view/shell/bottom-bar/BottomBar.tsx:146 +#: src/view/shell/desktop/LeftNav.tsx:323 +#: src/view/shell/desktop/Search.tsx:161 +#: src/view/shell/desktop/Search.tsx:170 +#: src/view/shell/Drawer.tsx:351 +#: src/view/shell/Drawer.tsx:352 +msgid "Search" +msgstr "" + +#: src/view/screens/Search/Search.tsx:390 +msgid "Search for posts and users." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:110 +msgid "Security Step Required" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:29 +msgid "See what's next" +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:75 +msgid "Select Bluesky Social" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:117 +msgid "Select from an existing account" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:143 +msgid "Select service" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:280 +msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown." +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:97 +msgid "Select your app language for the default text to display in the app" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:189 +msgid "Select your preferred language for translations in your feed." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:188 +msgid "Send Confirmation Email" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:127 +msgid "Send email" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:138 +msgid "Send Email" +msgstr "" + +#: src/view/shell/Drawer.tsx:284 +#: src/view/shell/Drawer.tsx:305 +msgid "Send feedback" +msgstr "" + +#: src/view/com/modals/report/SendReportButton.tsx:45 +msgid "Send Report" +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:78 +msgid "Set new password" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:216 +msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:113 +msgid "Set this setting to \"No\" to hide all replies from your feed." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:182 +msgid "Set this setting to \"No\" to hide all reposts from your feed." +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:116 +msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:252 +msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." +msgstr "" + +#: src/view/screens/Settings.tsx:277 +#: src/view/shell/desktop/LeftNav.tsx:435 +#: src/view/shell/Drawer.tsx:554 +#: src/view/shell/Drawer.tsx:555 +msgid "Settings" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:125 +msgid "Sexual activity or erotic nudity." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:314 +#: src/view/com/util/forms/PostDropdownBtn.tsx:126 +#: src/view/screens/ProfileList.tsx:407 +msgid "Share" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:312 +msgid "Share feed" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:276 +#~ msgid "Share link" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:316 +msgid "Show" +msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:114 +msgid "Show anyway" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:249 +msgid "Show Posts from My Feeds" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:213 +msgid "Show Quote Posts" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:110 +msgid "Show Replies" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:94 +msgid "Show replies by people you follow before all other replies." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:179 +msgid "Show Reposts" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:337 +msgid "Show users" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:98 +#: src/view/com/auth/SplashScreen.tsx:49 +#: src/view/shell/NavSignupCard.tsx:52 +#: src/view/shell/NavSignupCard.tsx:53 +msgid "Sign in" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:52 +#: src/view/com/auth/SplashScreen.web.tsx:84 +msgid "Sign In" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 +msgid "Sign in as {0}" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 +#: src/view/com/auth/login/Login.tsx:116 +msgid "Sign in as..." +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:130 +msgid "Sign into" +msgstr "" + +#: src/view/com/modals/SwitchAccount.tsx:60 +#: src/view/com/modals/SwitchAccount.tsx:63 +msgid "Sign out" +msgstr "" + +#: src/view/shell/NavSignupCard.tsx:43 +#: src/view/shell/NavSignupCard.tsx:44 +#: src/view/shell/NavSignupCard.tsx:46 +msgid "Sign up" +msgstr "" + +#: src/view/shell/NavSignupCard.tsx:36 +msgid "Sign up or sign in to join the conversation" +msgstr "" + +#: src/view/screens/Settings.tsx:327 +msgid "Signed in as" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33 +msgid "Skip" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:69 +msgid "Sort Replies" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:72 +msgid "Sort replies to the same post by:" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:122 +msgid "Square" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:90 +#: src/view/com/modals/ServerInput.tsx:62 +msgid "Staging" +msgstr "" + +#: src/view/screens/Settings.tsx:730 +msgid "Status page" +msgstr "" + +#: src/view/screens/Settings.tsx:666 +msgid "Storybook" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:101 +msgid "Submit" +msgstr ">>>>>>> cb8a33b6 (Fix translations)" + +#: src/view/screens/ProfileList.tsx:597 +msgid "Subscribe" +msgstr "" + +#: src/view/screens/ProfileList.tsx:593 +msgid "Subscribe to this list" +msgstr "" + +#: src/view/screens/Search/Search.tsx:354 +msgid "Suggested Follows" +msgstr "" + +#: src/view/screens/Support.tsx:30 +#: src/view/screens/Support.tsx:33 +msgid "Support" +msgstr "" + +#: src/view/com/modals/SwitchAccount.tsx:111 +msgid "Switch Account" +msgstr "" + +#: src/view/screens/Settings.tsx:398 +#~ msgid "System" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:646 +msgid "System log" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:112 +msgid "Tall" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:84 +msgid "Terms" +msgstr "" + +#: src/view/screens/TermsOfService.tsx:29 +msgid "Terms of Service" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:70 +#: src/view/com/modals/report/InputIssueDetails.tsx:50 +msgid "Text input field" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:282 +msgid "The account will be able to interact with you after unblocking." +msgstr "" + +#: src/view/screens/CommunityGuidelines.tsx:36 +msgid "The Community Guidelines have been moved to <0/>" +msgstr "" + +#: src/view/screens/CopyrightPolicy.tsx:33 +msgid "The Copyright Policy has been moved to <0/>" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:430 +msgid "The post may have been deleted." +msgstr "" + +#: src/view/screens/PrivacyPolicy.tsx:33 +msgid "The Privacy Policy has been moved to <0/>" +msgstr "" + +#: src/view/screens/Support.tsx:36 +msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us." +msgstr "" + +#: src/view/screens/TermsOfService.tsx:33 +msgid "The Terms of Service have been moved to" +msgstr "" + +#: src/view/com/util/ErrorBoundary.tsx:35 +msgid "There was an unexpected issue in the application. Please let us know if this happened to you!" +msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +msgid "This {0} has been labeled." +msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:72 +msgid "This {screenDescription} has been flagged:" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:107 +msgid "This content is not viewable without a Bluesky account." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:113 +msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:61 +msgid "This information is not shared with other users." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:105 +msgid "This is important in case you ever need to change your email or reset your password." +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:55 +msgid "This is the service that keeps you online." +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:56 +msgid "This link is taking you to the following website:" +msgstr "" + +#: src/view/com/post-thread/PostThreadItem.tsx:123 +msgid "This post has been deleted." +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:137 +msgid "This warning is only available for posts with media attached." +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:53 +#: src/view/screens/Settings.tsx:503 +msgid "Thread Preferences" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:113 +msgid "Threaded Mode" +msgstr "" + +#: src/view/com/util/forms/DropdownButton.tsx:230 +msgid "Toggle dropdown" +msgstr "" + +#: src/view/com/modals/EditImage.tsx:271 +msgid "Transformations" +msgstr "" + +#: src/view/com/post-thread/PostThreadItem.tsx:692 +#: src/view/com/post-thread/PostThreadItem.tsx:694 +#: src/view/com/util/forms/PostDropdownBtn.tsx:98 +msgid "Translate" +msgstr "" + +#: src/view/com/util/error/ErrorScreen.tsx:73 +msgid "Try again" +msgstr "" + +#: src/view/screens/ProfileList.tsx:495 +msgid "Un-block list" +msgstr "" + +#: src/view/screens/ProfileList.tsx:480 +msgid "Un-mute list" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:64 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:117 +msgid "Unable to contact your service. Please check your Internet connection." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:442 +#: src/view/com/profile/ProfileHeader.tsx:445 +msgid "Unblock" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:280 +#: src/view/com/profile/ProfileHeader.tsx:364 +msgid "Unblock Account" +msgstr "" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Undo repost" +msgstr "" + +#: src/view/com/auth/create/state.ts:210 +msgid "Unfortunately, you do not meet the requirements to create an account." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:345 +msgid "Unmute Account" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:144 +msgid "Unmute thread" +msgstr "" + +#: src/view/screens/ProfileList.tsx:463 +msgid "Unpin moderation list" +msgstr "" + +#: src/view/com/modals/UserAddRemoveLists.tsx:54 +msgid "Update {displayName} in Lists" +msgstr "" + +#: src/lib/hooks/useOTAUpdate.ts:15 +msgid "Update Available" +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:172 +msgid "Updating..." +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:453 +msgid "Upload a text file to:" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:194 +msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password." +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:513 +msgid "Use default provider" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:150 +msgid "Use this to sign into the other app along with your handle." +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:197 +msgid "Used by:" +msgstr "" + +#: src/view/com/auth/create/Step3.tsx:38 +msgid "User handle" +msgstr "" + +#: src/view/screens/Lists.tsx:58 +msgid "User Lists" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:170 +#: src/view/com/auth/login/LoginForm.tsx:187 +msgid "Username or email address" +msgstr "" + +#: src/view/screens/ProfileList.tsx:767 +msgid "Users" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:115 +msgid "Users followed by <0/>" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "" + +#: src/view/screens/Settings.tsx:750 +msgid "Verify email" +msgstr "" + +#: src/view/screens/Settings.tsx:775 +msgid "Verify my email" +msgstr "" + +#: src/view/screens/Settings.tsx:784 +msgid "Verify My Email" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:205 +#: src/view/com/modals/ChangeEmail.tsx:207 +msgid "Verify New Email" +msgstr "" + +#: src/view/screens/Log.tsx:52 +msgid "View debug entry" +msgstr "" + +#: src/view/com/profile/ProfileSubpageHeader.tsx:128 +msgid "View the avatar" +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:73 +msgid "Visit Site" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:125 +msgid "We're so excited to have you join us!" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:99 +#~ msgid "We're sorry, but this content is not viewable without a Bluesky account." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:105 +#~ msgid "We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +#~ msgstr "" + +#: src/view/screens/Search/Search.tsx:237 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "" + +#: src/view/screens/NotFound.tsx:48 +msgid "We're sorry! We can't find the page you were looking for." +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46 +msgid "Welcome to <0>Bluesky" +msgstr "" + +#: src/view/com/modals/report/Modal.tsx:169 +msgid "What is the issue with this {collectionName}?" +msgstr "" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78 +msgid "Which languages are used in this post?" +msgstr "" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 +msgid "Which languages would you like to see in your algorithmic feeds?" +msgstr "" + +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:43 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:79 +msgid "Who can reply?" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:102 +msgid "Wide" +msgstr "" + +#: src/view/com/composer/Composer.tsx:396 +msgid "Write post" +msgstr "" + +#: src/view/com/composer/Prompt.tsx:33 +msgid "Write your reply" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:192 +#: src/view/screens/PreferencesHomeFeed.tsx:227 +#: src/view/screens/PreferencesHomeFeed.tsx:262 +msgid "Yes" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:106 +msgid "You can change hosting providers at any time." +msgstr "" + +#: src/view/com/auth/login/Login.tsx:158 +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31 +msgid "You can now sign in with your new password." +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:64 +msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer." +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:102 +msgid "You don't have any pinned feeds." +msgstr "" + +#: src/view/screens/Feeds.tsx:383 +msgid "You don't have any saved feeds!" +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:135 +msgid "You don't have any saved feeds." +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:378 +msgid "You have blocked the author or you have been blocked by the author." +msgstr "" + +#: src/view/com/feeds/ProfileFeedgens.tsx:154 +msgid "You have no feeds." +msgstr "" + +#: src/view/com/lists/MyLists.tsx:89 +#: src/view/com/lists/ProfileLists.tsx:158 +msgid "You have no lists." +msgstr "" + +#: src/view/screens/ModerationBlockedAccounts.tsx:131 +msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account." +msgstr "" + +#: src/view/screens/AppPasswords.tsx:86 +msgid "You have not created any app passwords yet. You can create one by pressing the button below." +msgstr "" + +#: src/view/screens/ModerationMutedAccounts.tsx:130 +msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account." +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:81 +msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:43 +msgid "Your account" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:122 +msgid "Your birth date" +msgstr "" + +#: src/view/com/auth/create/state.ts:102 +msgid "Your email appears to be invalid." +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:107 +msgid "Your email has been saved! We'll be in touch soon." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:125 +msgid "Your email has been updated but not verified. As a next step, please verify your new email." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:100 +msgid "Your email has not yet been verified. This is an important security step which we recommend." +msgstr "" + +#: src/view/com/auth/create/Step3.tsx:42 +#: src/view/com/modals/ChangeHandle.tsx:270 +msgid "Your full handle will be" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:53 +msgid "Your hosting provider" +msgstr "" + +#: src/view/screens/Settings.tsx:402 +#: src/view/shell/desktop/RightNav.tsx:127 +#: src/view/shell/Drawer.tsx:644 +msgid "Your invite codes are hidden when logged in using an App Password" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59 +msgid "Your posts, likes, and blocks are public. Mutes are private." +msgstr "" + +#: src/view/com/modals/SwitchAccount.tsx:78 +msgid "Your profile" +msgstr "" + +#: src/view/screens/Moderation.tsx:205 +#~ msgid "Your profile and account will not be visible to anyone visiting the Bluesky app without an account, or to account holders who are not logged in. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +#~ msgid "Your profile and content will not be visible to anyone visiting the Bluesky app without an account. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." +msgstr "" + +#: src/view/com/auth/create/Step3.tsx:28 +msgid "Your user handle" +msgstr "" diff --git a/src/locale/locales/fr/messages.po b/src/locale/locales/fr/messages.po new file mode 100644 index 0000000000..0a195de0e3 --- /dev/null +++ b/src/locale/locales/fr/messages.po @@ -0,0 +1,2479 @@ +msgid "" +msgstr "" +"POT-Creation-Date: 2023-11-05 16:01-0800\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: @lingui/cli\n" +"Language: fr\n" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/view/screens/Profile.tsx:214 +#~ msgid "- end of feed -" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:138 +#~ msgid ". This warning is only available for posts with media attached." +#~ msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:158 +msgid "{0, plural, one {# invite code available} other {# invite codes available}}" +msgstr "" + +#: src/view/com/modals/Repost.tsx:44 +msgid "{0}" +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:176 +msgid "{0} {purposeLabel} List" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:141 +msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" +msgstr "" + +#: src/view/screens/Settings.tsx:407 +#: src/view/shell/Drawer.tsx:648 +msgid "{invitesAvailable} invite code available" +msgstr "" + +#: src/view/screens/Settings.tsx:409 +#: src/view/shell/Drawer.tsx:650 +msgid "{invitesAvailable} invite codes available" +msgstr "" + +#: src/view/screens/Search/Search.tsx:87 +msgid "{message}" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:130 +msgid "<0/> members" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 +msgid "<0>Choose your<1>Recommended<2>Feeds" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:37 +msgid "<0>Follow some<1>Recommended<2>Users" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:132 +#~ msgid "<0>Here is your app password. Use this to sign into the other app along with your handle." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: This setting may not be respected by third-party apps that display Bluesky content." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:212 +#~ msgid "<0>Note: Your profile and posts will remain publicly available. Third-party apps that display Bluesky content may not respect this setting." +#~ msgstr "" + +#: src/lib/hooks/useOTAUpdate.ts:16 +msgid "A new version of the app is available. Please update to continue using the app." +msgstr "" + +#: src/view/com/modals/EditImage.tsx:299 +#: src/view/screens/Settings.tsx:417 +msgid "Accessibility" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:159 +#: src/view/screens/Settings.tsx:286 +msgid "Account" +msgstr "" + +#: src/view/com/util/AccountDropdownBtn.tsx:41 +msgid "Account options" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/screens/ProfileList.tsx:783 +msgid "Add" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:56 +msgid "Add a content warning" +msgstr "" + +#: src/view/screens/ProfileList.tsx:773 +msgid "Add a user to this list" +msgstr "" + +#: src/view/screens/Settings.tsx:355 +#: src/view/screens/Settings.tsx:364 +msgid "Add account" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:119 +#: src/view/com/composer/photos/Gallery.tsx:180 +msgid "Add alt text" +msgstr "" + +#: src/view/com/modals/report/InputIssueDetails.tsx:41 +#: src/view/com/modals/report/Modal.tsx:191 +msgid "Add details" +msgstr "" + +#: src/view/com/modals/report/Modal.tsx:194 +msgid "Add details to report" +msgstr "" + +#: src/view/com/composer/Composer.tsx:425 +msgid "Add link card" +msgstr "" + +#: src/view/com/composer/Composer.tsx:428 +msgid "Add link card:" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:415 +msgid "Add the following DNS record to your domain:" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:329 +msgid "Add to Lists" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:280 +msgid "Add to my feeds" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:191 +#: src/view/com/modals/UserAddRemoveLists.tsx:128 +msgid "Added to list" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:164 +msgid "Adjust the number of likes a reply must have to be shown in your feed." +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:75 +msgid "Adult Content" +msgstr "" + +#: src/view/screens/Settings.tsx:569 +msgid "Advanced" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:130 +msgid "ALT" +msgstr "" + +#: src/view/com/modals/EditImage.tsx:315 +msgid "Alt text" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:209 +msgid "Alt text describes images for blind and low-vision users, and helps give context to everyone." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:110 +msgid "An email has been sent to {0}. It includes a confirmation code which you can enter below." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:119 +msgid "An email has been sent to your previous address, {0}. It includes a confirmation code which you can enter below." +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:236 +msgid "and" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:94 +msgid "App Language" +msgstr "" + +#: src/view/screens/Settings.tsx:589 +msgid "App passwords" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:186 +msgid "App Passwords" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:65 +msgid "Appeal Decision" +msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:51 +msgid "Appeal this decision" +msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:55 +msgid "Appeal this decision." +msgstr "" + +#: src/view/screens/Settings.tsx:432 +msgid "Appearance" +msgstr "" + +#: src/view/screens/Moderation.tsx:206 +#~ msgid "Apps that respect this setting, including the official Bluesky app and bsky.app website, won't show your content to logged out users." +#~ msgstr "" + +#: src/view/screens/AppPasswords.tsx:223 +msgid "Are you sure you want to delete the app password \"{name}\"?" +msgstr "" + +#: src/view/com/composer/Composer.tsx:139 +msgid "Are you sure you'd like to discard this draft?" +msgstr "" + +#: src/view/screens/ProfileList.tsx:375 +msgid "Are you sure?" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:185 +msgid "Are you sure? This cannot be undone." +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:123 +msgid "Artistic or non-erotic nudity." +msgstr "" + +#: src/view/screens/Moderation.tsx:189 +#~ msgid "Ask apps to limit the visibility of my account" +#~ msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:145 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:166 +#: src/view/com/auth/login/LoginForm.tsx:249 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:148 +#: src/view/com/modals/report/InputIssueDetails.tsx:45 +#: src/view/com/post-thread/PostThread.tsx:385 +#: src/view/com/post-thread/PostThread.tsx:435 +#: src/view/com/post-thread/PostThread.tsx:443 +#: src/view/com/profile/ProfileHeader.tsx:648 +msgid "Back" +msgstr "" + +#: src/view/screens/Settings.tsx:461 +msgid "Basics" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:131 +#: src/view/com/modals/BirthDateSettings.tsx:72 +msgid "Birthday" +msgstr "" + +#: src/view/screens/Settings.tsx:312 +msgid "Birthday:" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:258 +#: src/view/com/profile/ProfileHeader.tsx:365 +msgid "Block Account" +msgstr "" + +#: src/view/screens/ProfileList.tsx:545 +msgid "Block accounts" +msgstr "" + +#: src/view/screens/ProfileList.tsx:495 +msgid "Block list" +msgstr "" + +#: src/view/screens/ProfileList.tsx:330 +msgid "Block these accounts?" +msgstr "" + +#: src/view/screens/Moderation.tsx:121 +msgid "Blocked accounts" +msgstr "" + +#: src/view/screens/ModerationBlockedAccounts.tsx:106 +msgid "Blocked Accounts" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:260 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "" + +#: src/view/screens/ModerationBlockedAccounts.tsx:114 +msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours." +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:241 +msgid "Blocked post." +msgstr "" + +#: src/view/screens/ProfileList.tsx:332 +msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:26 +msgid "Bluesky" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:80 +msgid "Bluesky is flexible." +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:69 +msgid "Bluesky is open." +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:56 +msgid "Bluesky is public." +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:70 +msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon." +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:78 +msgid "Bluesky.Social" +msgstr "" + +#: src/view/screens/Settings.tsx:718 +msgid "Build version {0} {1}" +msgstr "" + +#: src/view/com/composer/photos/OpenCameraBtn.tsx:60 +#: src/view/com/util/UserAvatar.tsx:217 +#: src/view/com/util/UserBanner.tsx:38 +msgid "Camera" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:214 +msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." +msgstr "" + +#: src/view/com/composer/Composer.tsx:278 +#: src/view/com/composer/Composer.tsx:281 +#: src/view/com/modals/AltImage.tsx:127 +#: src/view/com/modals/ChangeEmail.tsx:218 +#: src/view/com/modals/ChangeEmail.tsx:220 +#: src/view/com/modals/Confirm.tsx:88 +#: src/view/com/modals/CreateOrEditList.tsx:267 +#: src/view/com/modals/CreateOrEditList.tsx:272 +#: src/view/com/modals/DeleteAccount.tsx:150 +#: src/view/com/modals/DeleteAccount.tsx:223 +#: src/view/com/modals/EditImage.tsx:323 +#: src/view/com/modals/EditProfile.tsx:248 +#: src/view/com/modals/LinkWarning.tsx:85 +#: src/view/com/modals/Repost.tsx:73 +#: src/view/com/modals/Waitlist.tsx:136 +#: src/view/screens/Search/Search.tsx:558 +#: src/view/shell/desktop/Search.tsx:182 +msgid "Cancel" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:146 +#: src/view/com/modals/DeleteAccount.tsx:219 +msgid "Cancel account deletion" +msgstr "" + +#: src/view/com/modals/AltImage.tsx:122 +msgid "Cancel add image alt text" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:149 +msgid "Cancel change handle" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:134 +msgid "Cancel image crop" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:243 +msgid "Cancel profile editing" +msgstr "" + +#: src/view/com/modals/Repost.tsx:64 +msgid "Cancel quote post" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:87 +#: src/view/shell/desktop/Search.tsx:178 +msgid "Cancel search" +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:132 +msgid "Cancel waitlist signup" +msgstr "" + +#: src/view/screens/Settings.tsx:306 +msgid "Change" +msgstr "" + +#: src/view/screens/Settings.tsx:601 +#: src/view/screens/Settings.tsx:610 +msgid "Change handle" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:161 +msgid "Change Handle" +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:133 +msgid "Change my email" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:109 +msgid "Change Your Email" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:121 +msgid "Check out some recommended feeds. Tap + to add them to your list of pinned feeds." +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:185 +msgid "Check out some recommended users. Follow them to see similar users." +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:163 +msgid "Check your inbox for an email with the confirmation code to enter below:" +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:38 +msgid "Choose Service" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:83 +msgid "Choose the algorithms that power your experience with custom feeds." +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:65 +#~ msgid "Choose your" +#~ msgstr "" + +#: src/view/com/auth/create/Step2.tsx:106 +msgid "Choose your password" +msgstr "" + +#: src/view/screens/Settings.tsx:694 +msgid "Clear all legacy storage data" +msgstr "" + +#: src/view/screens/Settings.tsx:696 +msgid "Clear all legacy storage data (restart after this)" +msgstr "" + +#: src/view/screens/Settings.tsx:706 +msgid "Clear all storage data" +msgstr "" + +#: src/view/screens/Settings.tsx:708 +msgid "Clear all storage data (restart after this)" +msgstr "" + +#: src/view/com/util/forms/SearchInput.tsx:73 +#: src/view/screens/Search/Search.tsx:543 +msgid "Clear search query" +msgstr "" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:38 +msgid "Close alert" +msgstr "" + +#: src/view/com/util/BottomSheetCustomBackdrop.tsx:33 +msgid "Close bottom drawer" +msgstr "" + +#: src/view/com/lightbox/ImageViewing/components/ImageDefaultHeader.tsx:26 +msgid "Close image" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:112 +msgid "Close image viewer" +msgstr "" + +#: src/view/shell/index.web.tsx:49 +msgid "Close navigation footer" +msgstr "" + +#: src/view/screens/CommunityGuidelines.tsx:32 +msgid "Community Guidelines" +msgstr "" + +#: src/view/com/composer/Prompt.tsx:24 +msgid "Compose reply" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:98 +#: src/view/com/modals/Confirm.tsx:75 +#: src/view/com/modals/SelfLabel.tsx:154 +#: src/view/com/modals/VerifyEmail.tsx:217 +#: src/view/screens/PreferencesHomeFeed.tsx:299 +#: src/view/screens/PreferencesThreads.tsx:153 +msgid "Confirm" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:193 +#: src/view/com/modals/ChangeEmail.tsx:195 +msgid "Confirm Change" +msgstr "" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:34 +msgid "Confirm content language settings" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:209 +msgid "Confirm delete account" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:157 +#: src/view/com/modals/DeleteAccount.tsx:176 +#: src/view/com/modals/VerifyEmail.tsx:151 +msgid "Confirmation code" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:178 +#: src/view/com/auth/login/LoginForm.tsx:268 +msgid "Connecting..." +msgstr "" + +#: src/view/screens/Moderation.tsx:79 +msgid "Content filtering" +msgstr "" + +#: src/view/com/modals/ContentFilteringSettings.tsx:44 +msgid "Content Filtering" +msgstr "" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:74 +#: src/view/screens/LanguageSettings.tsx:277 +msgid "Content Languages" +msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:69 +msgid "Content Warning" +msgstr "" + +#: src/view/com/composer/labels/LabelsBtn.tsx:31 +msgid "Content warnings" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:148 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:209 +msgid "Continue" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:193 +#: src/view/com/modals/InviteCodes.tsx:179 +msgid "Copied" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:186 +msgid "Copy" +msgstr "" + +#: src/view/screens/ProfileList.tsx:407 +msgid "Copy link to list" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:126 +msgid "Copy link to post" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:314 +msgid "Copy link to profile" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:112 +msgid "Copy post text" +msgstr "" + +#: src/view/screens/CopyrightPolicy.tsx:29 +msgid "Copyright Policy" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:103 +msgid "Could not load feed" +msgstr "" + +#: src/view/screens/ProfileList.tsx:860 +msgid "Could not load list" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:41 +msgid "Create a new account" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:124 +msgid "Create Account" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:38 +msgid "Create new account" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:248 +msgid "Created {0}" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:387 +#: src/view/com/modals/ServerInput.tsx:102 +msgid "Custom domain" +msgstr "" + +#: src/view/screens/Settings.tsx:615 +msgid "Danger Zone" +msgstr "" + +#: src/view/screens/Settings.tsx:411 +#~ msgid "Dark" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:622 +msgid "Delete account" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:83 +msgid "Delete Account" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:221 +#: src/view/screens/AppPasswords.tsx:241 +msgid "Delete app password" +msgstr "" + +#: src/view/screens/ProfileList.tsx:374 +#: src/view/screens/ProfileList.tsx:434 +msgid "Delete List" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:212 +msgid "Delete my account" +msgstr "" + +#: src/view/screens/Settings.tsx:632 +msgid "Delete my account…" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:180 +msgid "Delete post" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:184 +msgid "Delete this post?" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:233 +msgid "Deleted post." +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:218 +#: src/view/com/modals/CreateOrEditList.tsx:234 +#: src/view/com/modals/EditProfile.tsx:197 +#: src/view/com/modals/EditProfile.tsx:209 +msgid "Description" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:96 +msgid "Dev Server" +msgstr "" + +#: src/view/screens/Settings.tsx:637 +msgid "Developer Tools" +msgstr "" + +#: src/view/com/composer/Composer.tsx:140 +msgid "Discard" +msgstr "" + +#: src/view/com/composer/Composer.tsx:134 +msgid "Discard draft" +msgstr "" + +#: src/view/screens/Feeds.tsx:405 +msgid "Discover new feeds" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:191 +msgid "Display name" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:179 +msgid "Display Name" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:485 +msgid "Domain verified!" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:86 +#: src/view/com/modals/ContentFilteringSettings.tsx:88 +#: src/view/com/modals/ContentFilteringSettings.tsx:96 +#: src/view/com/modals/crop-image/CropImage.web.tsx:152 +#: src/view/com/modals/EditImage.tsx:333 +#: src/view/com/modals/ListAddRemoveUsers.tsx:142 +#: src/view/com/modals/SelfLabel.tsx:157 +#: src/view/com/modals/UserAddRemoveLists.tsx:79 +#: src/view/screens/PreferencesHomeFeed.tsx:302 +#: src/view/screens/PreferencesThreads.tsx:156 +msgid "Done" +msgstr "" + +#: src/view/com/modals/lang-settings/ConfirmLanguagesButton.tsx:42 +msgid "Done{extraText}" +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:94 +msgid "Each code works once. You'll receive more invite codes periodically." +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:144 +#: src/view/com/modals/EditImage.tsx:207 +msgid "Edit image" +msgstr "" + +#: src/view/screens/ProfileList.tsx:422 +msgid "Edit list details" +msgstr "" + +#: src/view/screens/Feeds.tsx:367 +#: src/view/screens/SavedFeeds.tsx:85 +msgid "Edit My Feeds" +msgstr "" + +#: src/view/com/modals/EditProfile.tsx:151 +msgid "Edit my profile" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:429 +msgid "Edit profile" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:432 +msgid "Edit Profile" +msgstr "" + +#: src/view/screens/Feeds.tsx:330 +msgid "Edit Saved Feeds" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:90 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:148 +#: src/view/com/modals/ChangeEmail.tsx:141 +#: src/view/com/modals/Waitlist.tsx:88 +msgid "Email" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:81 +msgid "Email address" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:111 +msgid "Email Updated" +msgstr "" + +#: src/view/screens/Settings.tsx:290 +msgid "Email:" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:138 +msgid "Enable this setting to only see replies between people you follow." +msgstr "" + +#: src/view/screens/Profile.tsx:472 +msgid "End of feed" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:71 +msgid "Enter the address of your provider:" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:369 +msgid "Enter the domain you want to use" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:101 +msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password." +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:86 +msgid "Enter your email address" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:117 +msgid "Enter your new email address below." +msgstr "" + +#: src/view/com/auth/login/Login.tsx:99 +msgid "Enter your username and password" +msgstr "" + +#: src/view/screens/Search/Search.tsx:105 +msgid "Error:" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:156 +msgid "Expand alt text" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:109 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:141 +msgid "Failed to load recommended feeds" +msgstr "" + +#: src/view/screens/Feeds.tsx:559 +msgid "Feed offline" +msgstr "" + +#: src/view/com/feeds/FeedPage.tsx:140 +msgid "Feed Preferences" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:64 +#: src/view/shell/Drawer.tsx:300 +msgid "Feedback" +msgstr "" + +#: src/view/screens/Feeds.tsx:475 +#: src/view/shell/bottom-bar/BottomBar.tsx:168 +#: src/view/shell/desktop/LeftNav.tsx:341 +#: src/view/shell/Drawer.tsx:463 +#: src/view/shell/Drawer.tsx:464 +msgid "Feeds" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:57 +msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:156 +msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollowsItem.tsx:150 +msgid "Finding similar accounts..." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:102 +msgid "Fine-tune the content you see on your home screen." +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:60 +msgid "Fine-tune the discussion threads." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:514 +msgid "Follow" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:42 +#~ msgid "Follow some" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:64 +msgid "Follow some users to get started. We can recommend you more users based on who you find interesting." +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:145 +msgid "Followed users only" +msgstr "" + +#: src/view/screens/ProfileFollowers.tsx:25 +msgid "Followers" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:600 +msgid "following" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:498 +#: src/view/screens/ProfileFollows.tsx:25 +msgid "Following" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:547 +msgid "Follows you" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:107 +msgid "For security reasons, we'll need to send a confirmation code to your email address." +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:207 +msgid "For security reasons, you won't be able to view this again. If you lose this password, you'll need to generate a new one." +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:231 +msgid "Forgot" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:228 +msgid "Forgot password" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:127 +#: src/view/com/auth/login/Login.tsx:143 +msgid "Forgot Password" +msgstr "" + +#: src/view/com/composer/photos/SelectPhotoBtn.tsx:43 +msgid "Gallery" +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:175 +msgid "Get Started" +msgstr "" + +#: src/view/com/auth/LoggedOut.tsx:68 +#: src/view/com/auth/LoggedOut.tsx:69 +#: src/view/com/util/moderation/ScreenHider.tsx:105 +#: src/view/shell/desktop/LeftNav.tsx:106 +msgid "Go back" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:112 +#: src/view/screens/ProfileFeed.tsx:117 +#: src/view/screens/ProfileList.tsx:869 +#: src/view/screens/ProfileList.tsx:874 +msgid "Go Back" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:181 +#: src/view/com/auth/login/LoginForm.tsx:278 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:163 +msgid "Go to next" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:265 +msgid "Handle" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:93 +#: src/view/shell/Drawer.tsx:310 +msgid "Help" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:148 +msgid "Here is your app password." +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:316 +msgid "Hide" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:308 +msgid "Hide user list" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:102 +#~ msgid "Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:110 +msgid "Hmm, some kind of issue occurred when contacting the feed server. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:104 +msgid "Hmm, the feed server appears to be offline. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:101 +msgid "Hmm, the feed server gave a bad response. Please let the feed owner know about this issue." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:95 +msgid "Hmm, we're having trouble finding this feed. It may have been deleted." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:87 +#~ msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +#~ msgstr "" + +#: src/view/shell/bottom-bar/BottomBar.tsx:124 +#: src/view/shell/desktop/LeftNav.tsx:305 +#: src/view/shell/Drawer.tsx:387 +#: src/view/shell/Drawer.tsx:388 +msgid "Home" +msgstr "" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:99 +#: src/view/screens/PreferencesHomeFeed.tsx:95 +#: src/view/screens/Settings.tsx:481 +msgid "Home Feed Preferences" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:114 +msgid "Hosting provider" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:76 +#: src/view/com/auth/create/Step1.tsx:81 +msgid "Hosting provider address" +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:200 +msgid "I have a code" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:281 +msgid "I have my own domain" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:127 +msgid "If none are selected, suitable for all ages." +msgstr "" + +#: src/view/com/modals/AltImage.tsx:96 +msgid "Image alt text" +msgstr "" + +#: src/view/com/util/UserAvatar.tsx:304 +#: src/view/com/util/UserBanner.tsx:116 +msgid "Image options" +msgstr "" + +#: src/view/com/search/Suggestions.tsx:104 +#: src/view/com/search/Suggestions.tsx:115 +#~ msgid "In Your Network" +#~ msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:113 +msgid "Invalid username or password" +msgstr "" + +#: src/view/screens/Settings.tsx:383 +msgid "Invite" +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:91 +#: src/view/screens/Settings.tsx:371 +msgid "Invite a Friend" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:57 +msgid "Invite code" +msgstr "" + +#: src/view/com/auth/create/state.ts:136 +msgid "Invite code not accepted. Check that you input it correctly and try again." +msgstr "" + +#: src/view/shell/Drawer.tsx:629 +msgid "Invite codes: {invitesAvailable} available" +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:67 +msgid "Join the waitlist" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:68 +#: src/view/com/auth/create/Step2.tsx:72 +msgid "Join the waitlist." +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:124 +msgid "Join Waitlist" +msgstr "" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:104 +msgid "Language selection" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:88 +msgid "Language Settings" +msgstr "" + +#: src/view/screens/Settings.tsx:541 +msgid "Languages" +msgstr "" + +#: src/view/com/util/moderation/PostAlerts.tsx:47 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:65 +#: src/view/com/util/moderation/ScreenHider.tsx:88 +msgid "Learn More" +msgstr "" + +#: src/view/com/util/moderation/ContentHider.tsx:83 +#: src/view/com/util/moderation/PostAlerts.tsx:40 +#: src/view/com/util/moderation/PostHider.tsx:76 +#: src/view/com/util/moderation/ProfileHeaderAlerts.tsx:49 +#: src/view/com/util/moderation/ScreenHider.tsx:85 +msgid "Learn more about this warning" +msgstr "" + +#: src/view/screens/Moderation.tsx:239 +msgid "Learn more about what is public on Bluesky." +msgstr "" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:82 +msgid "Leave them all unchecked to see any language." +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:49 +msgid "Leaving Bluesky" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:128 +#: src/view/com/auth/login/Login.tsx:144 +msgid "Let's get your password reset!" +msgstr "" + +#: src/view/com/util/UserAvatar.tsx:241 +#: src/view/com/util/UserBanner.tsx:60 +msgid "Library" +msgstr "" + +#: src/view/screens/Settings.tsx:405 +#~ msgid "Light" +#~ msgstr "" + +#: src/view/screens/ProfileFeed.tsx:643 +msgid "Like this feed" +msgstr "" + +#: src/view/screens/PostLikedBy.tsx:27 +#: src/view/screens/ProfileFeedLikedBy.tsx:27 +msgid "Liked by" +msgstr "" + +#: src/view/screens/Moderation.tsx:203 +#~ msgid "Limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:203 +msgid "Limit the visibility of my account to logged-out users" +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:186 +msgid "List Avatar" +msgstr "" + +#: src/view/com/modals/CreateOrEditList.tsx:199 +msgid "List Name" +msgstr "" + +#: src/view/shell/desktop/LeftNav.tsx:381 +#: src/view/shell/Drawer.tsx:479 +#: src/view/shell/Drawer.tsx:480 +msgid "Lists" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:250 +#: src/view/com/post-thread/PostThread.tsx:258 +msgid "Load more posts" +msgstr "" + +#: src/view/screens/Notifications.tsx:130 +msgid "Load new notifications" +msgstr "" + +#: src/view/com/feeds/FeedPage.tsx:185 +msgid "Load new posts" +msgstr "" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:95 +msgid "Loading..." +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:50 +msgid "Local dev server" +msgstr "" + +#: src/view/screens/Moderation.tsx:134 +msgid "Logged-out users" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 +msgid "Login to account that is not listed" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:482 +msgid "Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!" +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:63 +msgid "Make sure this is where you intend to go!" +msgstr "" + +#: src/view/screens/Search/Search.tsx:503 +msgid "Menu" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:194 +#: src/view/screens/ProfileFeed.tsx:490 +msgid "Message from server" +msgstr "" + +#: src/view/screens/Moderation.tsx:63 +#: src/view/screens/Settings.tsx:563 +#: src/view/shell/desktop/LeftNav.tsx:399 +#: src/view/shell/Drawer.tsx:498 +#: src/view/shell/Drawer.tsx:499 +msgid "Moderation" +msgstr "" + +#: src/view/screens/Moderation.tsx:93 +msgid "Moderation lists" +msgstr "" + +#: src/view/screens/ModerationModlists.tsx:58 +msgid "Moderation Lists" +msgstr "" + +#: src/view/shell/desktop/Feeds.tsx:53 +msgid "More feeds" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:524 +#: src/view/screens/ProfileFeed.tsx:370 +#: src/view/screens/ProfileList.tsx:606 +msgid "More options" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:158 +#~ msgid "More post options" +#~ msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:346 +msgid "Mute Account" +msgstr "" + +#: src/view/screens/ProfileList.tsx:533 +msgid "Mute accounts" +msgstr "" + +#: src/view/screens/ProfileList.tsx:480 +msgid "Mute list" +msgstr "" + +#: src/view/screens/ProfileList.tsx:293 +msgid "Mute these accounts?" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:144 +msgid "Mute thread" +msgstr "" + +#: src/view/screens/Moderation.tsx:107 +msgid "Muted accounts" +msgstr "" + +#: src/view/screens/ModerationMutedAccounts.tsx:106 +msgid "Muted Accounts" +msgstr "" + +#: src/view/screens/ModerationMutedAccounts.tsx:114 +msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private." +msgstr "" + +#: src/view/screens/ProfileList.tsx:295 +msgid "Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them." +msgstr "" + +#: src/view/screens/Moderation.tsx:134 +#~ msgid "My Account" +#~ msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:56 +msgid "My Birthday" +msgstr "" + +#: src/view/screens/Feeds.tsx:363 +msgid "My Feeds" +msgstr "" + +#: src/view/shell/desktop/LeftNav.tsx:67 +msgid "My Profile" +msgstr "" + +#: src/view/screens/Settings.tsx:520 +msgid "My Saved Feeds" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:177 +#: src/view/com/modals/CreateOrEditList.tsx:211 +msgid "Name" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:72 +msgid "Never lose access to your followers and data." +msgstr "" + +#: src/view/screens/Lists.tsx:76 +#: src/view/screens/ModerationModlists.tsx:78 +msgid "New" +msgstr "" + +#: src/view/com/feeds/FeedPage.tsx:196 +#: src/view/screens/Feeds.tsx:510 +#: src/view/screens/Profile.tsx:389 +#: src/view/screens/ProfileFeed.tsx:451 +#: src/view/screens/ProfileList.tsx:212 +#: src/view/screens/ProfileList.tsx:244 +#: src/view/shell/desktop/LeftNav.tsx:254 +msgid "New post" +msgstr "" + +#: src/view/shell/desktop/LeftNav.tsx:264 +msgid "New Post" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:158 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:174 +#: src/view/com/auth/login/ForgotPasswordForm.tsx:184 +#: src/view/com/auth/login/LoginForm.tsx:281 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:156 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:166 +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:79 +msgid "Next" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:142 +msgid "Next image" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:191 +#: src/view/screens/PreferencesHomeFeed.tsx:226 +#: src/view/screens/PreferencesHomeFeed.tsx:263 +msgid "No" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:636 +#: src/view/screens/ProfileList.tsx:740 +msgid "No description" +msgstr "" + +#: src/view/com/composer/text-input/mobile/Autocomplete.tsx:97 +msgid "No result" +msgstr "" + +#: src/view/screens/Feeds.tsx:452 +msgid "No results found for \"{query}\"" +msgstr "" + +#: src/view/com/modals/ListAddUser.tsx:142 +#: src/view/shell/desktop/Search.tsx:112 +#~ msgid "No results found for {0}" +#~ msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:127 +#: src/view/screens/Search/Search.tsx:270 +#: src/view/screens/Search/Search.tsx:298 +#: src/view/screens/Search/Search.tsx:581 +#: src/view/shell/desktop/Search.tsx:210 +msgid "No results found for {query}" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:136 +#~ msgid "Not Applicable" +#~ msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:135 +msgid "Not Applicable." +msgstr "" + +#: src/view/screens/Moderation.tsx:227 +msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +msgstr "" + +#: src/view/screens/Moderation.tsx:227 +#~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." +#~ msgstr "" + +#: src/view/screens/Notifications.tsx:97 +#: src/view/screens/Notifications.tsx:121 +#: src/view/shell/bottom-bar/BottomBar.tsx:195 +#: src/view/shell/desktop/LeftNav.tsx:363 +#: src/view/shell/Drawer.tsx:424 +#: src/view/shell/Drawer.tsx:425 +msgid "Notifications" +msgstr "" + +#: src/view/com/util/ErrorBoundary.tsx:34 +msgid "Oh no!" +msgstr "" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:41 +msgid "Okay" +msgstr "" + +#: src/view/com/composer/Composer.tsx:341 +msgid "One or more images is missing alt text." +msgstr "" + +#: src/view/com/pager/FeedsTabBarMobile.tsx:79 +msgid "Open navigation" +msgstr "" + +#: src/view/screens/Settings.tsx:533 +msgid "Opens configurable language settings" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:146 +#: src/view/shell/Drawer.tsx:630 +msgid "Opens list of invite codes" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:279 +msgid "Opens modal for using custom domain" +msgstr "" + +#: src/view/screens/Settings.tsx:558 +msgid "Opens moderation settings" +msgstr "" + +#: src/view/screens/Settings.tsx:514 +msgid "Opens screen with all saved feeds" +msgstr "" + +#: src/view/screens/Settings.tsx:581 +msgid "Opens the app password settings page" +msgstr "" + +#: src/view/screens/Settings.tsx:473 +msgid "Opens the home feed preferences" +msgstr "" + +#: src/view/screens/Settings.tsx:664 +msgid "Opens the storybook page" +msgstr "" + +#: src/view/screens/Settings.tsx:644 +msgid "Opens the system log page" +msgstr "" + +#: src/view/screens/Settings.tsx:494 +msgid "Opens the threads preferences" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 +msgid "Other account" +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:88 +msgid "Other service" +msgstr "" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:91 +msgid "Other..." +msgstr "" + +#: src/view/screens/NotFound.tsx:42 +#: src/view/screens/NotFound.tsx:45 +msgid "Page not found" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:101 +#: src/view/com/auth/create/Step2.tsx:111 +#: src/view/com/auth/login/LoginForm.tsx:216 +#: src/view/com/auth/login/SetNewPasswordForm.tsx:130 +#: src/view/com/modals/DeleteAccount.tsx:191 +msgid "Password" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:157 +msgid "Password updated" +msgstr "" + +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:28 +msgid "Password updated!" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:121 +msgid "Pictures meant for adults." +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:89 +msgid "Pinned Feeds" +msgstr "" + +#: src/view/com/auth/create/state.ts:116 +msgid "Please choose your handle." +msgstr "" + +#: src/view/com/auth/create/state.ts:109 +msgid "Please choose your password." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:67 +msgid "Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed." +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:140 +msgid "Please enter a unique name for this App Password or use our randomly generated one." +msgstr "" + +#: src/view/com/auth/create/state.ts:95 +msgid "Please enter your email." +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:180 +msgid "Please enter your password as well:" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:72 +#: src/view/com/modals/AppealLabel.tsx:75 +msgid "Please tell us why you think this decision was incorrect." +msgstr "" + +#: src/view/com/composer/Composer.tsx:324 +#: src/view/com/post-thread/PostThread.tsx:216 +#: src/view/screens/PostThread.tsx:77 +msgid "Post" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:375 +msgid "Post hidden" +msgstr "" + +#: src/view/com/composer/select-language/SelectLangBtn.tsx:87 +msgid "Post language" +msgstr "" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:75 +msgid "Post Languages" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:427 +msgid "Post not found" +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:44 +msgid "Potentially Misleading Link" +msgstr "" + +#: src/view/com/lightbox/Lightbox.web.tsx:128 +msgid "Previous image" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:186 +msgid "Primary Language" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:91 +msgid "Prioritize Your Follows" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:75 +msgid "Privacy" +msgstr "" + +#: src/view/screens/PrivacyPolicy.tsx:29 +msgid "Privacy Policy" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:190 +msgid "Processing..." +msgstr "" + +#: src/view/shell/bottom-bar/BottomBar.tsx:237 +#: src/view/shell/Drawer.tsx:72 +#: src/view/shell/Drawer.tsx:533 +#: src/view/shell/Drawer.tsx:534 +msgid "Profile" +msgstr "" + +#: src/view/screens/Settings.tsx:789 +msgid "Protect your account by verifying your email." +msgstr "" + +#: src/view/screens/ModerationModlists.tsx:61 +msgid "Public, shareable lists of users to mute or block in bulk." +msgstr "" + +#: src/view/screens/Lists.tsx:61 +msgid "Public, shareable lists which can drive feeds." +msgstr "" + +#: src/view/com/modals/Repost.tsx:52 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:58 +msgid "Quote post" +msgstr "" + +#: src/view/com/modals/Repost.tsx:56 +msgid "Quote Post" +msgstr "" + +#: src/view/com/modals/EditImage.tsx:236 +msgid "Ratios" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:73 +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:50 +#~ msgid "Recommended" +#~ msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFeeds.tsx:116 +msgid "Recommended Feeds" +msgstr "" + +#: src/view/com/auth/onboarding/RecommendedFollows.tsx:180 +msgid "Recommended Users" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:264 +#: src/view/com/modals/SelfLabel.tsx:83 +#: src/view/com/modals/UserAddRemoveLists.tsx:193 +#: src/view/com/util/UserAvatar.tsx:278 +#: src/view/com/util/UserBanner.tsx:89 +msgid "Remove" +msgstr "" + +#: src/view/com/feeds/FeedSourceCard.tsx:108 +msgid "Remove {0} from my feeds?" +msgstr "" + +#: src/view/com/util/AccountDropdownBtn.tsx:22 +msgid "Remove account" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:130 +msgid "Remove feed" +msgstr "" + +#: src/view/com/feeds/FeedSourceCard.tsx:107 +#: src/view/screens/ProfileFeed.tsx:280 +msgid "Remove from my feeds" +msgstr "" + +#: src/view/com/composer/photos/Gallery.tsx:167 +msgid "Remove image" +msgstr "" + +#: src/view/com/composer/ExternalEmbed.tsx:70 +msgid "Remove image preview" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:131 +msgid "Remove this feed from your saved feeds?" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:199 +#: src/view/com/modals/UserAddRemoveLists.tsx:136 +msgid "Removed from list" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:74 +msgid "Replies to this thread are disabled" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:135 +msgid "Reply Filters" +msgstr "" + +#: src/view/com/modals/report/Modal.tsx:166 +msgid "Report {collectionName}" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:380 +msgid "Report Account" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:300 +msgid "Report feed" +msgstr "" + +#: src/view/screens/ProfileList.tsx:448 +msgid "Report List" +msgstr "" + +#: src/view/com/modals/report/SendReportButton.tsx:37 +#: src/view/com/util/forms/PostDropdownBtn.tsx:162 +msgid "Report post" +msgstr "" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Repost" +msgstr "" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:94 +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:105 +msgid "Repost or quote post" +msgstr "" + +#: src/view/screens/PostRepostedBy.tsx:27 +msgid "Reposted by" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:181 +#: src/view/com/modals/ChangeEmail.tsx:183 +msgid "Request Change" +msgstr "" + +#: src/view/screens/Moderation.tsx:188 +#~ msgid "Request to limit the visibility of my account" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:382 +#~ msgid "Require alt text before posting" +#~ msgstr "" + +#: src/view/com/auth/create/Step2.tsx:53 +msgid "Required for this provider" +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:108 +msgid "Reset code" +msgstr "" + +#: src/view/screens/Settings.tsx:686 +msgid "Reset onboarding state" +msgstr "" + +#: src/view/com/auth/login/ForgotPasswordForm.tsx:98 +msgid "Reset password" +msgstr "" + +#: src/view/screens/Settings.tsx:676 +msgid "Reset preferences state" +msgstr "" + +#: src/view/screens/Settings.tsx:684 +msgid "Resets the onboarding state" +msgstr "" + +#: src/view/screens/Settings.tsx:674 +msgid "Resets the preferences state" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:167 +#: src/view/com/auth/create/CreateAccount.tsx:171 +#: src/view/com/auth/login/LoginForm.tsx:258 +#: src/view/com/auth/login/LoginForm.tsx:261 +#: src/view/com/util/error/ErrorMessage.tsx:55 +#: src/view/com/util/error/ErrorScreen.tsx:65 +msgid "Retry" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:169 +#~ msgid "Retry change handle" +#~ msgstr "" + +#: src/view/com/modals/AltImage.tsx:114 +#: src/view/com/modals/BirthDateSettings.tsx:93 +#: src/view/com/modals/BirthDateSettings.tsx:96 +#: src/view/com/modals/ChangeHandle.tsx:173 +#: src/view/com/modals/CreateOrEditList.tsx:249 +#: src/view/com/modals/CreateOrEditList.tsx:257 +#: src/view/com/modals/EditProfile.tsx:223 +msgid "Save" +msgstr "" + +#: src/view/com/modals/AltImage.tsx:105 +msgid "Save alt text" +msgstr "" + +#: src/view/com/modals/UserAddRemoveLists.tsx:212 +#~ msgid "Save changes" +#~ msgstr "" + +#: src/view/com/modals/EditProfile.tsx:231 +msgid "Save Changes" +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:170 +msgid "Save handle change" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:144 +msgid "Save image crop" +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:122 +msgid "Saved Feeds" +msgstr "" + +#: src/view/com/modals/ListAddRemoveUsers.tsx:75 +#: src/view/com/util/forms/SearchInput.tsx:64 +#: src/view/screens/Search/Search.tsx:381 +#: src/view/screens/Search/Search.tsx:533 +#: src/view/shell/bottom-bar/BottomBar.tsx:146 +#: src/view/shell/desktop/LeftNav.tsx:323 +#: src/view/shell/desktop/Search.tsx:161 +#: src/view/shell/desktop/Search.tsx:170 +#: src/view/shell/Drawer.tsx:351 +#: src/view/shell/Drawer.tsx:352 +msgid "Search" +msgstr "" + +#: src/view/screens/Search/Search.tsx:390 +msgid "Search for posts and users." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:110 +msgid "Security Step Required" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:29 +msgid "See what's next" +msgstr "" + +#: src/view/com/modals/ServerInput.tsx:75 +msgid "Select Bluesky Social" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:117 +msgid "Select from an existing account" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:143 +msgid "Select service" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:280 +msgid "Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown." +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:97 +msgid "Select your app language for the default text to display in the app" +msgstr "" + +#: src/view/screens/LanguageSettings.tsx:189 +msgid "Select your preferred language for translations in your feed." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:188 +msgid "Send Confirmation Email" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:127 +msgid "Send email" +msgstr "" + +#: src/view/com/modals/DeleteAccount.tsx:138 +msgid "Send Email" +msgstr "" + +#: src/view/shell/Drawer.tsx:284 +#: src/view/shell/Drawer.tsx:305 +msgid "Send feedback" +msgstr "" + +#: src/view/com/modals/report/SendReportButton.tsx:45 +msgid "Send Report" +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:78 +msgid "Set new password" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:216 +msgid "Set this setting to \"No\" to hide all quote posts from your feed. Reposts will still be visible." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:113 +msgid "Set this setting to \"No\" to hide all replies from your feed." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:182 +msgid "Set this setting to \"No\" to hide all reposts from your feed." +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:116 +msgid "Set this setting to \"Yes\" to show replies in a threaded view. This is an experimental feature." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:252 +msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your following feed. This is an experimental feature." +msgstr "" + +#: src/view/screens/Settings.tsx:277 +#: src/view/shell/desktop/LeftNav.tsx:435 +#: src/view/shell/Drawer.tsx:554 +#: src/view/shell/Drawer.tsx:555 +msgid "Settings" +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:125 +msgid "Sexual activity or erotic nudity." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:314 +#: src/view/com/util/forms/PostDropdownBtn.tsx:126 +#: src/view/screens/ProfileList.tsx:407 +msgid "Share" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:312 +msgid "Share feed" +msgstr "" + +#: src/view/screens/ProfileFeed.tsx:276 +#~ msgid "Share link" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:316 +msgid "Show" +msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:114 +msgid "Show anyway" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:249 +msgid "Show Posts from My Feeds" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:213 +msgid "Show Quote Posts" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:110 +msgid "Show Replies" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:94 +msgid "Show replies by people you follow before all other replies." +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:179 +msgid "Show Reposts" +msgstr "" + +#: src/view/com/notifications/FeedItem.tsx:337 +msgid "Show users" +msgstr "" + +#: src/view/com/auth/login/Login.tsx:98 +#: src/view/com/auth/SplashScreen.tsx:49 +#: src/view/shell/NavSignupCard.tsx:52 +#: src/view/shell/NavSignupCard.tsx:53 +msgid "Sign in" +msgstr "" + +#: src/view/com/auth/SplashScreen.tsx:52 +#: src/view/com/auth/SplashScreen.web.tsx:84 +msgid "Sign In" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 +msgid "Sign in as {0}" +msgstr "" + +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 +#: src/view/com/auth/login/Login.tsx:116 +msgid "Sign in as..." +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:130 +msgid "Sign into" +msgstr "" + +#: src/view/com/modals/SwitchAccount.tsx:60 +#: src/view/com/modals/SwitchAccount.tsx:63 +msgid "Sign out" +msgstr "" + +#: src/view/shell/NavSignupCard.tsx:43 +#: src/view/shell/NavSignupCard.tsx:44 +#: src/view/shell/NavSignupCard.tsx:46 +msgid "Sign up" +msgstr "" + +#: src/view/shell/NavSignupCard.tsx:36 +msgid "Sign up or sign in to join the conversation" +msgstr "" + +#: src/view/screens/Settings.tsx:327 +msgid "Signed in as" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:33 +msgid "Skip" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:69 +msgid "Sort Replies" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:72 +msgid "Sort replies to the same post by:" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:122 +msgid "Square" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:90 +#: src/view/com/modals/ServerInput.tsx:62 +msgid "Staging" +msgstr "" + +#: src/view/screens/Settings.tsx:730 +msgid "Status page" +msgstr "" + +#: src/view/screens/Settings.tsx:666 +msgid "Storybook" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:101 +msgid "Submit" +msgstr ">>>>>>> cb8a33b6 (Fix translations)" + +#: src/view/screens/ProfileList.tsx:597 +msgid "Subscribe" +msgstr "" + +#: src/view/screens/ProfileList.tsx:593 +msgid "Subscribe to this list" +msgstr "" + +#: src/view/screens/Search/Search.tsx:354 +msgid "Suggested Follows" +msgstr "" + +#: src/view/screens/Support.tsx:30 +#: src/view/screens/Support.tsx:33 +msgid "Support" +msgstr "" + +#: src/view/com/modals/SwitchAccount.tsx:111 +msgid "Switch Account" +msgstr "" + +#: src/view/screens/Settings.tsx:398 +#~ msgid "System" +#~ msgstr "" + +#: src/view/screens/Settings.tsx:646 +msgid "System log" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:112 +msgid "Tall" +msgstr "" + +#: src/view/shell/desktop/RightNav.tsx:84 +msgid "Terms" +msgstr "" + +#: src/view/screens/TermsOfService.tsx:29 +msgid "Terms of Service" +msgstr "" + +#: src/view/com/modals/AppealLabel.tsx:70 +#: src/view/com/modals/report/InputIssueDetails.tsx:50 +msgid "Text input field" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:282 +msgid "The account will be able to interact with you after unblocking." +msgstr "" + +#: src/view/screens/CommunityGuidelines.tsx:36 +msgid "The Community Guidelines have been moved to <0/>" +msgstr "" + +#: src/view/screens/CopyrightPolicy.tsx:33 +msgid "The Copyright Policy has been moved to <0/>" +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:430 +msgid "The post may have been deleted." +msgstr "" + +#: src/view/screens/PrivacyPolicy.tsx:33 +msgid "The Privacy Policy has been moved to <0/>" +msgstr "" + +#: src/view/screens/Support.tsx:36 +msgid "The support form has been moved. If you need help, please<0/> or visit {HELP_DESK_URL} to get in touch with us." +msgstr "" + +#: src/view/screens/TermsOfService.tsx:33 +msgid "The Terms of Service have been moved to" +msgstr "" + +#: src/view/com/util/ErrorBoundary.tsx:35 +msgid "There was an unexpected issue in the application. Please let us know if this happened to you!" +msgstr "" + +#: src/view/com/util/moderation/LabelInfo.tsx:45 +msgid "This {0} has been labeled." +msgstr "" + +#: src/view/com/util/moderation/ScreenHider.tsx:72 +msgid "This {screenDescription} has been flagged:" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:107 +msgid "This content is not viewable without a Bluesky account." +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:113 +msgid "This feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +msgstr "" + +#: src/view/com/modals/BirthDateSettings.tsx:61 +msgid "This information is not shared with other users." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:105 +msgid "This is important in case you ever need to change your email or reset your password." +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:55 +msgid "This is the service that keeps you online." +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:56 +msgid "This link is taking you to the following website:" +msgstr "" + +#: src/view/com/post-thread/PostThreadItem.tsx:123 +msgid "This post has been deleted." +msgstr "" + +#: src/view/com/modals/SelfLabel.tsx:137 +msgid "This warning is only available for posts with media attached." +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:53 +#: src/view/screens/Settings.tsx:503 +msgid "Thread Preferences" +msgstr "" + +#: src/view/screens/PreferencesThreads.tsx:113 +msgid "Threaded Mode" +msgstr "" + +#: src/view/com/util/forms/DropdownButton.tsx:230 +msgid "Toggle dropdown" +msgstr "" + +#: src/view/com/modals/EditImage.tsx:271 +msgid "Transformations" +msgstr "" + +#: src/view/com/post-thread/PostThreadItem.tsx:692 +#: src/view/com/post-thread/PostThreadItem.tsx:694 +#: src/view/com/util/forms/PostDropdownBtn.tsx:98 +msgid "Translate" +msgstr "" + +#: src/view/com/util/error/ErrorScreen.tsx:73 +msgid "Try again" +msgstr "" + +#: src/view/screens/ProfileList.tsx:495 +msgid "Un-block list" +msgstr "" + +#: src/view/screens/ProfileList.tsx:480 +msgid "Un-mute list" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:64 +#: src/view/com/auth/login/Login.tsx:76 +#: src/view/com/auth/login/LoginForm.tsx:117 +msgid "Unable to contact your service. Please check your Internet connection." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:442 +#: src/view/com/profile/ProfileHeader.tsx:445 +msgid "Unblock" +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:280 +#: src/view/com/profile/ProfileHeader.tsx:364 +msgid "Unblock Account" +msgstr "" + +#: src/view/com/util/post-ctrls/RepostButton.web.tsx:48 +msgid "Undo repost" +msgstr "" + +#: src/view/com/auth/create/state.ts:210 +msgid "Unfortunately, you do not meet the requirements to create an account." +msgstr "" + +#: src/view/com/profile/ProfileHeader.tsx:345 +msgid "Unmute Account" +msgstr "" + +#: src/view/com/util/forms/PostDropdownBtn.tsx:144 +msgid "Unmute thread" +msgstr "" + +#: src/view/screens/ProfileList.tsx:463 +msgid "Unpin moderation list" +msgstr "" + +#: src/view/com/modals/UserAddRemoveLists.tsx:54 +msgid "Update {displayName} in Lists" +msgstr "" + +#: src/lib/hooks/useOTAUpdate.ts:15 +msgid "Update Available" +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:172 +msgid "Updating..." +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:453 +msgid "Upload a text file to:" +msgstr "" + +#: src/view/screens/AppPasswords.tsx:194 +msgid "Use app passwords to login to other Bluesky clients without giving full access to your account or password." +msgstr "" + +#: src/view/com/modals/ChangeHandle.tsx:513 +msgid "Use default provider" +msgstr "" + +#: src/view/com/modals/AddAppPasswords.tsx:150 +msgid "Use this to sign into the other app along with your handle." +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:197 +msgid "Used by:" +msgstr "" + +#: src/view/com/auth/create/Step3.tsx:38 +msgid "User handle" +msgstr "" + +#: src/view/screens/Lists.tsx:58 +msgid "User Lists" +msgstr "" + +#: src/view/com/auth/login/LoginForm.tsx:170 +#: src/view/com/auth/login/LoginForm.tsx:187 +msgid "Username or email address" +msgstr "" + +#: src/view/screens/ProfileList.tsx:767 +msgid "Users" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:115 +msgid "Users followed by <0/>" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "" + +#: src/view/screens/Settings.tsx:750 +msgid "Verify email" +msgstr "" + +#: src/view/screens/Settings.tsx:775 +msgid "Verify my email" +msgstr "" + +#: src/view/screens/Settings.tsx:784 +msgid "Verify My Email" +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:205 +#: src/view/com/modals/ChangeEmail.tsx:207 +msgid "Verify New Email" +msgstr "" + +#: src/view/screens/Log.tsx:52 +msgid "View debug entry" +msgstr "" + +#: src/view/com/profile/ProfileSubpageHeader.tsx:128 +msgid "View the avatar" +msgstr "" + +#: src/view/com/modals/LinkWarning.tsx:73 +msgid "Visit Site" +msgstr "" + +#: src/view/com/auth/create/CreateAccount.tsx:125 +msgid "We're so excited to have you join us!" +msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:99 +#~ msgid "We're sorry, but this content is not viewable without a Bluesky account." +#~ msgstr "" + +#: src/view/com/posts/FeedErrorMessage.tsx:105 +#~ msgid "We're sorry, but this feed is currently receiving high traffic and is temporarily unavailable. Please try again later." +#~ msgstr "" + +#: src/view/screens/Search/Search.tsx:237 +msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." +msgstr "" + +#: src/view/screens/NotFound.tsx:48 +msgid "We're sorry! We can't find the page you were looking for." +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:46 +msgid "Welcome to <0>Bluesky" +msgstr "" + +#: src/view/com/modals/report/Modal.tsx:169 +msgid "What is the issue with this {collectionName}?" +msgstr "" + +#: src/view/com/modals/lang-settings/PostLanguagesSettings.tsx:78 +msgid "Which languages are used in this post?" +msgstr "" + +#: src/view/com/modals/lang-settings/ContentLanguagesSettings.tsx:77 +msgid "Which languages would you like to see in your algorithmic feeds?" +msgstr "" + +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:43 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:79 +msgid "Who can reply?" +msgstr "" + +#: src/view/com/modals/crop-image/CropImage.web.tsx:102 +msgid "Wide" +msgstr "" + +#: src/view/com/composer/Composer.tsx:396 +msgid "Write post" +msgstr "" + +#: src/view/com/composer/Prompt.tsx:33 +msgid "Write your reply" +msgstr "" + +#: src/view/screens/PreferencesHomeFeed.tsx:192 +#: src/view/screens/PreferencesHomeFeed.tsx:227 +#: src/view/screens/PreferencesHomeFeed.tsx:262 +msgid "Yes" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:106 +msgid "You can change hosting providers at any time." +msgstr "" + +#: src/view/com/auth/login/Login.tsx:158 +#: src/view/com/auth/login/PasswordUpdatedForm.tsx:31 +msgid "You can now sign in with your new password." +msgstr "" + +#: src/view/com/modals/InviteCodes.tsx:64 +msgid "You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer." +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:102 +msgid "You don't have any pinned feeds." +msgstr "" + +#: src/view/screens/Feeds.tsx:383 +msgid "You don't have any saved feeds!" +msgstr "" + +#: src/view/screens/SavedFeeds.tsx:135 +msgid "You don't have any saved feeds." +msgstr "" + +#: src/view/com/post-thread/PostThread.tsx:378 +msgid "You have blocked the author or you have been blocked by the author." +msgstr "" + +#: src/view/com/feeds/ProfileFeedgens.tsx:154 +msgid "You have no feeds." +msgstr "" + +#: src/view/com/lists/MyLists.tsx:89 +#: src/view/com/lists/ProfileLists.tsx:158 +msgid "You have no lists." +msgstr "" + +#: src/view/screens/ModerationBlockedAccounts.tsx:131 +msgid "You have not blocked any accounts yet. To block an account, go to their profile and selected \"Block account\" from the menu on their account." +msgstr "" + +#: src/view/screens/AppPasswords.tsx:86 +msgid "You have not created any app passwords yet. You can create one by pressing the button below." +msgstr "" + +#: src/view/screens/ModerationMutedAccounts.tsx:130 +msgid "You have not muted any accounts yet. To mute an account, go to their profile and selected \"Mute account\" from the menu on their account." +msgstr "" + +#: src/view/com/auth/login/SetNewPasswordForm.tsx:81 +msgid "You will receive an email with a \"reset code.\" Enter that code here, then enter your new password." +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:43 +msgid "Your account" +msgstr "" + +#: src/view/com/auth/create/Step2.tsx:122 +msgid "Your birth date" +msgstr "" + +#: src/view/com/auth/create/state.ts:102 +msgid "Your email appears to be invalid." +msgstr "" + +#: src/view/com/modals/Waitlist.tsx:107 +msgid "Your email has been saved! We'll be in touch soon." +msgstr "" + +#: src/view/com/modals/ChangeEmail.tsx:125 +msgid "Your email has been updated but not verified. As a next step, please verify your new email." +msgstr "" + +#: src/view/com/modals/VerifyEmail.tsx:100 +msgid "Your email has not yet been verified. This is an important security step which we recommend." +msgstr "" + +#: src/view/com/auth/create/Step3.tsx:42 +#: src/view/com/modals/ChangeHandle.tsx:270 +msgid "Your full handle will be" +msgstr "" + +#: src/view/com/auth/create/Step1.tsx:53 +msgid "Your hosting provider" +msgstr "" + +#: src/view/screens/Settings.tsx:402 +#: src/view/shell/desktop/RightNav.tsx:127 +#: src/view/shell/Drawer.tsx:644 +msgid "Your invite codes are hidden when logged in using an App Password" +msgstr "" + +#: src/view/com/auth/onboarding/WelcomeMobile.tsx:59 +msgid "Your posts, likes, and blocks are public. Mutes are private." +msgstr "" + +#: src/view/com/modals/SwitchAccount.tsx:78 +msgid "Your profile" +msgstr "" + +#: src/view/screens/Moderation.tsx:205 +#~ msgid "Your profile and account will not be visible to anyone visiting the Bluesky app without an account, or to account holders who are not logged in. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +#~ msgid "Your profile and content will not be visible to anyone visiting the Bluesky app without an account. Enabling this will not make your profile private." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:220 +msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." +msgstr "" + +#: src/view/com/auth/create/Step3.tsx:28 +msgid "Your user handle" +msgstr "" diff --git a/src/locale/locales/hi/messages.po b/src/locale/locales/hi/messages.po index ae5581e311..ee3e67bfab 100644 --- a/src/locale/locales/hi/messages.po +++ b/src/locale/locales/hi/messages.po @@ -38,12 +38,12 @@ msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite msgstr "" #: src/view/screens/Settings.tsx:407 -#: src/view/shell/Drawer.tsx:648 +#: src/view/shell/Drawer.tsx:640 msgid "{invitesAvailable} invite code available" msgstr "" #: src/view/screens/Settings.tsx:409 -#: src/view/shell/Drawer.tsx:650 +#: src/view/shell/Drawer.tsx:642 msgid "{invitesAvailable} invite codes available" msgstr "" @@ -51,6 +51,10 @@ msgstr "" msgid "{message}" msgstr "" +#: src/view/com/threadgate/WhoCanReply.tsx:158 +msgid "<0/> members" +msgstr "" + #: src/view/com/auth/onboarding/RecommendedFeeds.tsx:30 msgid "<0>Choose your<1>Recommended<2>Feeds" msgstr "<0>अपना<1>पसंदीदा<2>फ़ीड चुनें" @@ -122,11 +126,11 @@ msgstr "विवरण जोड़ें" msgid "Add details to report" msgstr "रिपोर्ट करने के लिए विवरण जोड़ें" -#: src/view/com/composer/Composer.tsx:425 +#: src/view/com/composer/Composer.tsx:432 msgid "Add link card" msgstr "लिंक कार्ड जोड़ें" -#: src/view/com/composer/Composer.tsx:428 +#: src/view/com/composer/Composer.tsx:435 msgid "Add link card:" msgstr "लिंक कार्ड जोड़ें:" @@ -134,7 +138,7 @@ msgstr "लिंक कार्ड जोड़ें:" msgid "Add the following DNS record to your domain:" msgstr "अपने डोमेन में निम्नलिखित DNS रिकॉर्ड जोड़ें:" -#: src/view/com/profile/ProfileHeader.tsx:329 +#: src/view/com/profile/ProfileHeader.tsx:353 msgid "Add to Lists" msgstr "सूचियों में जोड़ें" @@ -180,6 +184,7 @@ msgid "An email has been sent to your previous address, {0}. It includes a confi msgstr "{0} को ईमेल भेजा गया है। इसमें एक OTP कोड शामिल है जिसे आप नीचे दर्ज कर सकते हैं।।" #: src/view/com/notifications/FeedItem.tsx:236 +#: src/view/com/threadgate/WhoCanReply.tsx:178 msgid "and" msgstr "और" @@ -219,7 +224,7 @@ msgstr "दिखावट" msgid "Are you sure you want to delete the app password \"{name}\"?" msgstr "क्या आप वाकई ऐप पासवर्ड \"{name}\" हटाना चाहते हैं?" -#: src/view/com/composer/Composer.tsx:139 +#: src/view/com/composer/Composer.tsx:141 msgid "Are you sure you'd like to discard this draft?" msgstr "क्या आप वाकई इस ड्राफ्ट को हटाना करना चाहेंगे?" @@ -245,10 +250,10 @@ msgstr "कलात्मक या गैर-कामुक नग्नत #: src/view/com/auth/login/LoginForm.tsx:249 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 #: src/view/com/modals/report/InputIssueDetails.tsx:45 -#: src/view/com/post-thread/PostThread.tsx:385 -#: src/view/com/post-thread/PostThread.tsx:435 -#: src/view/com/post-thread/PostThread.tsx:443 -#: src/view/com/profile/ProfileHeader.tsx:648 +#: src/view/com/post-thread/PostThread.tsx:392 +#: src/view/com/post-thread/PostThread.tsx:442 +#: src/view/com/post-thread/PostThread.tsx:450 +#: src/view/com/profile/ProfileHeader.tsx:672 msgid "Back" msgstr "वापस" @@ -265,8 +270,8 @@ msgstr "जन्मदिन" msgid "Birthday:" msgstr "जन्मदिन:" -#: src/view/com/profile/ProfileHeader.tsx:258 -#: src/view/com/profile/ProfileHeader.tsx:365 +#: src/view/com/profile/ProfileHeader.tsx:282 +#: src/view/com/profile/ProfileHeader.tsx:389 msgid "Block Account" msgstr "खाता ब्लॉक करें" @@ -290,7 +295,7 @@ msgstr "ब्लॉक किए गए खाते" msgid "Blocked Accounts" msgstr "ब्लॉक किए गए खाते" -#: src/view/com/profile/ProfileHeader.tsx:260 +#: src/view/com/profile/ProfileHeader.tsx:284 msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." msgstr "अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।" @@ -298,7 +303,7 @@ msgstr "अवरुद्ध खाते आपके थ्रेड्स msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you. You will not see their content and they will be prevented from seeing yours." msgstr "अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते। आप उनकी सामग्री नहीं देख पाएंगे और उन्हें आपकी सामग्री देखने से रोका जाएगा।" -#: src/view/com/post-thread/PostThread.tsx:241 +#: src/view/com/post-thread/PostThread.tsx:248 msgid "Blocked post." msgstr "ब्लॉक पोस्ट।" @@ -326,6 +331,10 @@ msgstr "Bluesky सार्वजनिक है।।" msgid "Bluesky uses invites to build a healthier community. If you don't know anybody with an invite, you can sign up for the waitlist and we'll send one soon." msgstr "ब्लूस्की एक स्वस्थ समुदाय बनाने के लिए आमंत्रित करता है। यदि आप किसी को आमंत्रित नहीं करते हैं, तो आप प्रतीक्षा सूची के लिए साइन अप कर सकते हैं और हम जल्द ही एक भेज देंगे।।" +#: src/view/screens/Moderation.tsx:222 +msgid "Bluesky will not show your profile and posts to logged-out users. Other apps may not honor this request. This does not make your account private." +msgstr "" + #: src/view/com/modals/ServerInput.tsx:78 msgid "Bluesky.Social" msgstr "Bluesky.Social" @@ -344,8 +353,8 @@ msgstr "कैमरा" msgid "Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long." msgstr "केवल अक्षर, संख्या, रिक्त स्थान, डैश और अंडरस्कोर हो सकते हैं। कम से कम 4 अक्षर लंबा होना चाहिए, लेकिन 32 अक्षरों से अधिक लंबा नहीं होना चाहिए।।" -#: src/view/com/composer/Composer.tsx:278 -#: src/view/com/composer/Composer.tsx:281 +#: src/view/com/composer/Composer.tsx:279 +#: src/view/com/composer/Composer.tsx:282 #: src/view/com/modals/AltImage.tsx:127 #: src/view/com/modals/ChangeEmail.tsx:218 #: src/view/com/modals/ChangeEmail.tsx:220 @@ -568,7 +577,7 @@ msgstr "" msgid "Copy link to post" msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:314 +#: src/view/com/profile/ProfileHeader.tsx:338 msgid "Copy link to profile" msgstr "" @@ -651,7 +660,7 @@ msgstr "पोस्ट को हटाएं" msgid "Delete this post?" msgstr "इस पोस्ट को डीलीट करें?" -#: src/view/com/post-thread/PostThread.tsx:233 +#: src/view/com/post-thread/PostThread.tsx:240 msgid "Deleted post." msgstr "यह पोस्ट मिटाई जा चुकी है" @@ -670,14 +679,18 @@ msgstr "देव सर्वर" msgid "Developer Tools" msgstr "डेवलपर उपकरण" -#: src/view/com/composer/Composer.tsx:140 +#: src/view/com/composer/Composer.tsx:142 msgid "Discard" msgstr "" -#: src/view/com/composer/Composer.tsx:134 +#: src/view/com/composer/Composer.tsx:136 msgid "Discard draft" msgstr "ड्राफ्ट हटाएं" +#: src/view/screens/Moderation.tsx:204 +msgid "Discourage apps from showing my account to logged-out users" +msgstr "" + #: src/view/screens/Feeds.tsx:405 msgid "Discover new feeds" msgstr "नए फ़ीड की खोज करें" @@ -701,6 +714,8 @@ msgstr "डोमेन सत्यापित!" #: src/view/com/modals/EditImage.tsx:333 #: src/view/com/modals/ListAddRemoveUsers.tsx:142 #: src/view/com/modals/SelfLabel.tsx:157 +#: src/view/com/modals/Threadgate.tsx:129 +#: src/view/com/modals/Threadgate.tsx:132 #: src/view/com/modals/UserAddRemoveLists.tsx:79 #: src/view/screens/PreferencesHomeFeed.tsx:302 #: src/view/screens/PreferencesThreads.tsx:156 @@ -725,7 +740,7 @@ msgid "Edit list details" msgstr "सूची विवरण संपादित करें" #: src/view/screens/Feeds.tsx:367 -#: src/view/screens/SavedFeeds.tsx:85 +#: src/view/screens/SavedFeeds.tsx:84 msgid "Edit My Feeds" msgstr "मेरी फ़ीड संपादित करें" @@ -733,11 +748,11 @@ msgstr "मेरी फ़ीड संपादित करें" msgid "Edit my profile" msgstr "मेरी प्रोफ़ाइल संपादित करें" -#: src/view/com/profile/ProfileHeader.tsx:429 +#: src/view/com/profile/ProfileHeader.tsx:453 msgid "Edit profile" msgstr "मेरी प्रोफ़ाइल संपादित करें" -#: src/view/com/profile/ProfileHeader.tsx:432 +#: src/view/com/profile/ProfileHeader.tsx:456 msgid "Edit Profile" msgstr "मेरी प्रोफ़ाइल संपादित करें" @@ -768,7 +783,7 @@ msgstr "ईमेल:" msgid "Enable this setting to only see replies between people you follow." msgstr "इस सेटिंग को केवल उन लोगों के बीच जवाब देखने में सक्षम करें जिन्हें आप फॉलो करते हैं।।" -#: src/view/screens/Profile.tsx:472 +#: src/view/screens/Profile.tsx:471 msgid "End of feed" msgstr "" @@ -800,6 +815,10 @@ msgstr "अपने यूज़रनेम और पासवर्ड द msgid "Error:" msgstr "" +#: src/view/com/modals/Threadgate.tsx:76 +msgid "Everybody" +msgstr "" + #: src/view/com/lightbox/Lightbox.web.tsx:156 msgid "Expand alt text" msgstr "ऑल्ट टेक्स्ट" @@ -818,16 +837,16 @@ msgid "Feed Preferences" msgstr "फ़ीड प्राथमिकता" #: src/view/shell/desktop/RightNav.tsx:64 -#: src/view/shell/Drawer.tsx:300 +#: src/view/shell/Drawer.tsx:292 msgid "Feedback" msgstr "प्रतिक्रिया" #: src/view/screens/Feeds.tsx:475 #: src/view/screens/Profile.tsx:164 -#: src/view/shell/bottom-bar/BottomBar.tsx:168 -#: src/view/shell/desktop/LeftNav.tsx:341 -#: src/view/shell/Drawer.tsx:463 -#: src/view/shell/Drawer.tsx:464 +#: src/view/shell/bottom-bar/BottomBar.tsx:160 +#: src/view/shell/desktop/LeftNav.tsx:333 +#: src/view/shell/Drawer.tsx:455 +#: src/view/shell/Drawer.tsx:456 msgid "Feeds" msgstr "सभी फ़ीड" @@ -851,7 +870,7 @@ msgstr "अपने मुख्य फ़ीड की स्क्रीन msgid "Fine-tune the discussion threads." msgstr "चर्चा धागे को ठीक-ट्यून करें।।" -#: src/view/com/profile/ProfileHeader.tsx:514 +#: src/view/com/profile/ProfileHeader.tsx:538 msgid "Follow" msgstr "फॉलो" @@ -859,6 +878,10 @@ msgstr "फॉलो" msgid "Follow some users to get started. We can recommend you more users based on who you find interesting." msgstr "आरंभ करने के लिए कुछ उपयोगकर्ताओं का अनुसरण करें. आपको कौन दिलचस्प लगता है, इसके आधार पर हम आपको और अधिक उपयोगकर्ताओं की अनुशंसा कर सकते हैं।" +#: src/view/com/modals/Threadgate.tsx:98 +msgid "Followed users" +msgstr "" + #: src/view/screens/PreferencesHomeFeed.tsx:145 msgid "Followed users only" msgstr "केवल वे यूजर को फ़ॉलो किया गया" @@ -867,16 +890,16 @@ msgstr "केवल वे यूजर को फ़ॉलो किया ग msgid "Followers" msgstr "यह यूजर आपका फ़ोलो करता है" -#: src/view/com/profile/ProfileHeader.tsx:600 +#: src/view/com/profile/ProfileHeader.tsx:624 msgid "following" msgstr "फोल्लोविंग" -#: src/view/com/profile/ProfileHeader.tsx:498 +#: src/view/com/profile/ProfileHeader.tsx:522 #: src/view/screens/ProfileFollows.tsx:25 msgid "Following" msgstr "फोल्लोविंग" -#: src/view/com/profile/ProfileHeader.tsx:547 +#: src/view/com/profile/ProfileHeader.tsx:571 msgid "Follows you" msgstr "यह यूजर आपका फ़ोलो करता है" @@ -912,7 +935,7 @@ msgstr "प्रारंभ करें" #: src/view/com/auth/LoggedOut.tsx:68 #: src/view/com/auth/LoggedOut.tsx:69 #: src/view/com/util/moderation/ScreenHider.tsx:105 -#: src/view/shell/desktop/LeftNav.tsx:106 +#: src/view/shell/desktop/LeftNav.tsx:103 msgid "Go back" msgstr "वापस जाओ" @@ -934,7 +957,7 @@ msgid "Handle" msgstr "हैंडल" #: src/view/shell/desktop/RightNav.tsx:93 -#: src/view/shell/Drawer.tsx:310 +#: src/view/shell/Drawer.tsx:302 msgid "Help" msgstr "सहायता" @@ -978,10 +1001,10 @@ msgstr "" #~ msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." #~ msgstr "" -#: src/view/shell/bottom-bar/BottomBar.tsx:124 -#: src/view/shell/desktop/LeftNav.tsx:305 -#: src/view/shell/Drawer.tsx:387 -#: src/view/shell/Drawer.tsx:388 +#: src/view/shell/bottom-bar/BottomBar.tsx:116 +#: src/view/shell/desktop/LeftNav.tsx:297 +#: src/view/shell/Drawer.tsx:379 +#: src/view/shell/Drawer.tsx:380 msgid "Home" msgstr "होम फीड" @@ -1047,7 +1070,7 @@ msgstr "आमंत्रण कोड" msgid "Invite code not accepted. Check that you input it correctly and try again." msgstr "" -#: src/view/shell/Drawer.tsx:629 +#: src/view/shell/Drawer.tsx:621 msgid "Invite codes: {invitesAvailable} available" msgstr "" @@ -1134,8 +1157,8 @@ msgstr "" #~ msgstr "" #: src/view/screens/Moderation.tsx:203 -msgid "Limit the visibility of my account to logged-out users" -msgstr "" +#~ msgid "Limit the visibility of my account to logged-out users" +#~ msgstr "" #: src/view/com/modals/CreateOrEditList.tsx:186 msgid "List Avatar" @@ -1146,18 +1169,18 @@ msgid "List Name" msgstr "सूची का नाम" #: src/view/screens/Profile.tsx:165 -#: src/view/shell/desktop/LeftNav.tsx:381 -#: src/view/shell/Drawer.tsx:479 -#: src/view/shell/Drawer.tsx:480 +#: src/view/shell/desktop/LeftNav.tsx:373 +#: src/view/shell/Drawer.tsx:471 +#: src/view/shell/Drawer.tsx:472 msgid "Lists" msgstr "सूची" -#: src/view/com/post-thread/PostThread.tsx:250 -#: src/view/com/post-thread/PostThread.tsx:258 +#: src/view/com/post-thread/PostThread.tsx:257 +#: src/view/com/post-thread/PostThread.tsx:265 msgid "Load more posts" msgstr "अधिक पोस्ट लोड करें" -#: src/view/screens/Notifications.tsx:130 +#: src/view/screens/Notifications.tsx:141 msgid "Load new notifications" msgstr "नई सूचनाएं लोड करें" @@ -1174,7 +1197,11 @@ msgid "Local dev server" msgstr "स्थानीय देव सर्वर" #: src/view/screens/Moderation.tsx:134 -msgid "Logged-out users" +#~ msgid "Logged-out users" +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:134 +msgid "Logged-out visibility" msgstr "" #: src/view/com/auth/login/ChooseAccountForm.tsx:133 @@ -1193,6 +1220,14 @@ msgstr "यह सुनिश्चित करने के लिए कि msgid "Media" msgstr "" +#: src/view/com/threadgate/WhoCanReply.tsx:139 +msgid "mentioned users" +msgstr "" + +#: src/view/com/modals/Threadgate.tsx:93 +msgid "Mentioned users" +msgstr "" + #: src/view/screens/Search/Search.tsx:503 msgid "Menu" msgstr "मेनू" @@ -1204,9 +1239,9 @@ msgstr "" #: src/view/screens/Moderation.tsx:63 #: src/view/screens/Settings.tsx:563 -#: src/view/shell/desktop/LeftNav.tsx:399 -#: src/view/shell/Drawer.tsx:498 -#: src/view/shell/Drawer.tsx:499 +#: src/view/shell/desktop/LeftNav.tsx:391 +#: src/view/shell/Drawer.tsx:490 +#: src/view/shell/Drawer.tsx:491 msgid "Moderation" msgstr "मॉडरेशन" @@ -1222,7 +1257,7 @@ msgstr "" msgid "More feeds" msgstr "अधिक फ़ीड" -#: src/view/com/profile/ProfileHeader.tsx:524 +#: src/view/com/profile/ProfileHeader.tsx:548 #: src/view/screens/ProfileFeed.tsx:370 #: src/view/screens/ProfileList.tsx:606 msgid "More options" @@ -1232,7 +1267,7 @@ msgstr "अधिक विकल्प" #~ msgid "More post options" #~ msgstr "पोस्ट विकल्प" -#: src/view/com/profile/ProfileHeader.tsx:346 +#: src/view/com/profile/ProfileHeader.tsx:370 msgid "Mute Account" msgstr "खाता म्यूट करें" @@ -1280,7 +1315,7 @@ msgstr "जन्मदिन" msgid "My Feeds" msgstr "मेरी फ़ीड" -#: src/view/shell/desktop/LeftNav.tsx:67 +#: src/view/shell/desktop/LeftNav.tsx:64 msgid "My Profile" msgstr "मेरी प्रोफाइल" @@ -1308,11 +1343,11 @@ msgstr "नया" #: src/view/screens/ProfileFeed.tsx:451 #: src/view/screens/ProfileList.tsx:212 #: src/view/screens/ProfileList.tsx:244 -#: src/view/shell/desktop/LeftNav.tsx:254 +#: src/view/shell/desktop/LeftNav.tsx:246 msgid "New post" msgstr "नई पोस्ट" -#: src/view/shell/desktop/LeftNav.tsx:264 +#: src/view/shell/desktop/LeftNav.tsx:256 msgid "New Post" msgstr "नई पोस्ट" @@ -1362,6 +1397,10 @@ msgstr "\"{query}\" के लिए कोई परिणाम नहीं msgid "No results found for {query}" msgstr "" +#: src/view/com/modals/Threadgate.tsx:82 +msgid "Nobody" +msgstr "" + #: src/view/com/modals/SelfLabel.tsx:136 #~ msgid "Not Applicable" #~ msgstr "लागू नहीं" @@ -1371,19 +1410,23 @@ msgid "Not Applicable." msgstr "लागू नहीं।" #: src/view/screens/Moderation.tsx:227 -msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +#~ msgid "Note: Bluesky is an open and public network, and enabling this will not make your profile private or limit the ability of logged in users to see your posts. This setting only limits the visibility of posts on the Bluesky app and website; third-party apps that display Bluesky content may not respect this setting, and could show your content to logged-out users." +#~ msgstr "" + +#: src/view/screens/Moderation.tsx:229 +msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites." msgstr "" #: src/view/screens/Moderation.tsx:227 #~ msgid "Note: Third-party apps that display Bluesky content may not respect this setting." #~ msgstr "" -#: src/view/screens/Notifications.tsx:97 -#: src/view/screens/Notifications.tsx:121 -#: src/view/shell/bottom-bar/BottomBar.tsx:195 -#: src/view/shell/desktop/LeftNav.tsx:363 -#: src/view/shell/Drawer.tsx:424 -#: src/view/shell/Drawer.tsx:425 +#: src/view/screens/Notifications.tsx:108 +#: src/view/screens/Notifications.tsx:132 +#: src/view/shell/bottom-bar/BottomBar.tsx:187 +#: src/view/shell/desktop/LeftNav.tsx:355 +#: src/view/shell/Drawer.tsx:416 +#: src/view/shell/Drawer.tsx:417 msgid "Notifications" msgstr "सूचनाएं" @@ -1395,10 +1438,14 @@ msgstr "अरे नहीं!" msgid "Okay" msgstr "ठीक है" -#: src/view/com/composer/Composer.tsx:341 +#: src/view/com/composer/Composer.tsx:348 msgid "One or more images is missing alt text." msgstr "एक या अधिक छवियाँ alt पाठ याद आती हैं।।" +#: src/view/com/threadgate/WhoCanReply.tsx:100 +msgid "Only {0} can reply." +msgstr "" + #: src/view/com/pager/FeedsTabBarMobile.tsx:79 msgid "Open navigation" msgstr "ओपन नेविगेशन" @@ -1408,7 +1455,7 @@ msgid "Opens configurable language settings" msgstr "भाषा सेटिंग्स खोलें" #: src/view/shell/desktop/RightNav.tsx:146 -#: src/view/shell/Drawer.tsx:630 +#: src/view/shell/Drawer.tsx:622 msgid "Opens list of invite codes" msgstr "" @@ -1481,7 +1528,7 @@ msgstr "पासवर्ड अद्यतन!" msgid "Pictures meant for adults." msgstr "चित्र वयस्कों के लिए थे।।" -#: src/view/screens/SavedFeeds.tsx:89 +#: src/view/screens/SavedFeeds.tsx:88 msgid "Pinned Feeds" msgstr "पिन किया गया फ़ीड" @@ -1514,13 +1561,13 @@ msgstr "कृपया अपना पासवर्ड भी दर्ज msgid "Please tell us why you think this decision was incorrect." msgstr "" -#: src/view/com/composer/Composer.tsx:324 -#: src/view/com/post-thread/PostThread.tsx:216 -#: src/view/screens/PostThread.tsx:77 +#: src/view/com/composer/Composer.tsx:331 +#: src/view/com/post-thread/PostThread.tsx:223 +#: src/view/screens/PostThread.tsx:78 msgid "Post" msgstr "पोस्ट" -#: src/view/com/post-thread/PostThread.tsx:375 +#: src/view/com/post-thread/PostThread.tsx:382 msgid "Post hidden" msgstr "छुपा पोस्ट" @@ -1532,7 +1579,7 @@ msgstr "पोस्ट भाषा" msgid "Post Languages" msgstr "पोस्ट भाषा" -#: src/view/com/post-thread/PostThread.tsx:427 +#: src/view/com/post-thread/PostThread.tsx:434 msgid "Post not found" msgstr "पोस्ट नहीं मिला" @@ -1568,10 +1615,10 @@ msgstr "गोपनीयता नीति" msgid "Processing..." msgstr "प्रसंस्करण..." -#: src/view/shell/bottom-bar/BottomBar.tsx:237 -#: src/view/shell/Drawer.tsx:72 -#: src/view/shell/Drawer.tsx:533 -#: src/view/shell/Drawer.tsx:534 +#: src/view/shell/bottom-bar/BottomBar.tsx:229 +#: src/view/shell/Drawer.tsx:69 +#: src/view/shell/Drawer.tsx:525 +#: src/view/shell/Drawer.tsx:526 msgid "Profile" msgstr "प्रोफ़ाइल" @@ -1621,7 +1668,7 @@ msgstr "अनुशंसित लोग" msgid "Remove" msgstr "निकालें" -#: src/view/com/feeds/FeedSourceCard.tsx:108 +#: src/view/com/feeds/FeedSourceCard.tsx:106 msgid "Remove {0} from my feeds?" msgstr "मेरे फ़ीड से {0} हटाएं?" @@ -1633,7 +1680,8 @@ msgstr "खाता हटाएं" msgid "Remove feed" msgstr "फ़ीड हटाएँ" -#: src/view/com/feeds/FeedSourceCard.tsx:107 +#: src/view/com/feeds/FeedSourceCard.tsx:105 +#: src/view/com/feeds/FeedSourceCard.tsx:172 #: src/view/screens/ProfileFeed.tsx:280 msgid "Remove from my feeds" msgstr "मेरे फ़ीड से हटाएँ" @@ -1646,6 +1694,10 @@ msgstr "छवि निकालें" msgid "Remove image preview" msgstr "छवि पूर्वावलोकन निकालें" +#: src/view/com/feeds/FeedSourceCard.tsx:173 +msgid "Remove this feed from my feeds?" +msgstr "" + #: src/view/com/posts/FeedErrorMessage.tsx:131 msgid "Remove this feed from your saved feeds?" msgstr "इस फ़ीड को सहेजे गए फ़ीड से हटा दें?" @@ -1659,6 +1711,10 @@ msgstr "" msgid "Replies" msgstr "" +#: src/view/com/threadgate/WhoCanReply.tsx:98 +msgid "Replies to this thread are disabled" +msgstr "" + #: src/view/screens/PreferencesHomeFeed.tsx:135 msgid "Reply Filters" msgstr "फिल्टर" @@ -1667,7 +1723,7 @@ msgstr "फिल्टर" msgid "Report {collectionName}" msgstr "रिपोर्ट {collectionName}" -#: src/view/com/profile/ProfileHeader.tsx:380 +#: src/view/com/profile/ProfileHeader.tsx:404 msgid "Report Account" msgstr "रिपोर्ट" @@ -1789,12 +1845,12 @@ msgstr "सहेजे गए फ़ीड" #: src/view/com/util/forms/SearchInput.tsx:64 #: src/view/screens/Search/Search.tsx:381 #: src/view/screens/Search/Search.tsx:533 -#: src/view/shell/bottom-bar/BottomBar.tsx:146 -#: src/view/shell/desktop/LeftNav.tsx:323 +#: src/view/shell/bottom-bar/BottomBar.tsx:138 +#: src/view/shell/desktop/LeftNav.tsx:315 #: src/view/shell/desktop/Search.tsx:161 #: src/view/shell/desktop/Search.tsx:170 -#: src/view/shell/Drawer.tsx:351 -#: src/view/shell/Drawer.tsx:352 +#: src/view/shell/Drawer.tsx:343 +#: src/view/shell/Drawer.tsx:344 msgid "Search" msgstr "खोज" @@ -1846,8 +1902,8 @@ msgstr "ईमेल भेजें" msgid "Send Email" msgstr "ईमेल भेजें" -#: src/view/shell/Drawer.tsx:284 -#: src/view/shell/Drawer.tsx:305 +#: src/view/shell/Drawer.tsx:276 +#: src/view/shell/Drawer.tsx:297 msgid "Send feedback" msgstr "प्रतिक्रिया भेजें" @@ -1880,9 +1936,9 @@ msgid "Set this setting to \"Yes\" to show samples of your saved feeds in your f msgstr "इस सेटिंग को अपने निम्नलिखित फ़ीड में अपने सहेजे गए फ़ीड के नमूने दिखाने के लिए \"हाँ\" पर सेट करें। यह एक प्रयोगात्मक विशेषता है।।" #: src/view/screens/Settings.tsx:277 -#: src/view/shell/desktop/LeftNav.tsx:435 -#: src/view/shell/Drawer.tsx:554 -#: src/view/shell/Drawer.tsx:555 +#: src/view/shell/desktop/LeftNav.tsx:427 +#: src/view/shell/Drawer.tsx:546 +#: src/view/shell/Drawer.tsx:547 msgid "Settings" msgstr "सेटिंग्स" @@ -1890,7 +1946,7 @@ msgstr "सेटिंग्स" msgid "Sexual activity or erotic nudity." msgstr "यौन गतिविधि या कामुक नग्नता।।" -#: src/view/com/profile/ProfileHeader.tsx:314 +#: src/view/com/profile/ProfileHeader.tsx:338 #: src/view/com/util/forms/PostDropdownBtn.tsx:126 #: src/view/screens/ProfileList.tsx:407 msgid "Share" @@ -1961,8 +2017,8 @@ msgstr "... के रूप में साइन इन करें" msgid "Sign into" msgstr "साइन इन करें" -#: src/view/com/modals/SwitchAccount.tsx:60 -#: src/view/com/modals/SwitchAccount.tsx:63 +#: src/view/com/modals/SwitchAccount.tsx:64 +#: src/view/com/modals/SwitchAccount.tsx:67 msgid "Sign out" msgstr "साइन आउट" @@ -2011,7 +2067,7 @@ msgstr "Storybook" #: src/view/com/modals/AppealLabel.tsx:101 msgid "Submit" -msgstr ">>>>>>> cb8a33b6 (Fix translations)" +msgstr "" #: src/view/screens/ProfileList.tsx:597 msgid "Subscribe" @@ -2030,7 +2086,7 @@ msgstr "अनुशंसित लोग" msgid "Support" msgstr "सहायता" -#: src/view/com/modals/SwitchAccount.tsx:111 +#: src/view/com/modals/SwitchAccount.tsx:115 msgid "Switch Account" msgstr "खाते बदलें" @@ -2059,7 +2115,7 @@ msgstr "सेवा की शर्तें" msgid "Text input field" msgstr "पाठ इनपुट फ़ील्ड" -#: src/view/com/profile/ProfileHeader.tsx:282 +#: src/view/com/profile/ProfileHeader.tsx:306 msgid "The account will be able to interact with you after unblocking." msgstr "अनब्लॉक करने के बाद अकाउंट आपसे इंटरैक्ट कर सकेगा।" @@ -2071,7 +2127,7 @@ msgstr "सामुदायिक दिशानिर्देशों क msgid "The Copyright Policy has been moved to <0/>" msgstr "कॉपीराइट नीति को <0/> पर स्थानांतरित कर दिया गया है" -#: src/view/com/post-thread/PostThread.tsx:430 +#: src/view/com/post-thread/PostThread.tsx:437 msgid "The post may have been deleted." msgstr "हो सकता है कि यह पोस्ट हटा दी गई हो।" @@ -2123,7 +2179,7 @@ msgstr "यह वह सेवा है जो आपको ऑनलाइन msgid "This link is taking you to the following website:" msgstr "यह लिंक आपको निम्नलिखित वेबसाइट पर ले जा रहा है:" -#: src/view/com/post-thread/PostThreadItem.tsx:123 +#: src/view/com/post-thread/PostThreadItem.tsx:124 msgid "This post has been deleted." msgstr "इस पोस्ट को हटा दिया गया है।।" @@ -2148,8 +2204,8 @@ msgstr "ड्रॉपडाउन टॉगल करें" msgid "Transformations" msgstr "परिवर्तन" -#: src/view/com/post-thread/PostThreadItem.tsx:692 -#: src/view/com/post-thread/PostThreadItem.tsx:694 +#: src/view/com/post-thread/PostThreadItem.tsx:704 +#: src/view/com/post-thread/PostThreadItem.tsx:706 #: src/view/com/util/forms/PostDropdownBtn.tsx:98 msgid "Translate" msgstr "अनुवाद" @@ -2172,13 +2228,13 @@ msgstr "" msgid "Unable to contact your service. Please check your Internet connection." msgstr "आपकी सेवा से संपर्क करने में असमर्थ। कृपया अपने इंटरनेट कनेक्शन की जांच करें।।" -#: src/view/com/profile/ProfileHeader.tsx:442 -#: src/view/com/profile/ProfileHeader.tsx:445 +#: src/view/com/profile/ProfileHeader.tsx:466 +#: src/view/com/profile/ProfileHeader.tsx:469 msgid "Unblock" msgstr "अनब्लॉक" -#: src/view/com/profile/ProfileHeader.tsx:280 -#: src/view/com/profile/ProfileHeader.tsx:364 +#: src/view/com/profile/ProfileHeader.tsx:304 +#: src/view/com/profile/ProfileHeader.tsx:388 msgid "Unblock Account" msgstr "अनब्लॉक खाता" @@ -2190,7 +2246,7 @@ msgstr "पुनः पोस्ट पूर्ववत करें" msgid "Unfortunately, you do not meet the requirements to create an account." msgstr "" -#: src/view/com/profile/ProfileHeader.tsx:345 +#: src/view/com/profile/ProfileHeader.tsx:369 msgid "Unmute Account" msgstr "अनम्यूट खाता" @@ -2251,6 +2307,18 @@ msgstr "यूजर नाम या ईमेल पता" msgid "Users" msgstr "यूजर लोग" +#: src/view/com/threadgate/WhoCanReply.tsx:143 +msgid "users followed by <0/>" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:115 +#~ msgid "Users followed by <0/>" +#~ msgstr "" + +#: src/view/com/modals/Threadgate.tsx:106 +msgid "Users in \"{0}\"" +msgstr "" + #: src/view/screens/Settings.tsx:750 msgid "Verify email" msgstr "ईमेल सत्यापित करें" @@ -2316,11 +2384,20 @@ msgstr "इस पोस्ट में किस भाषा का उपय msgid "Which languages would you like to see in your algorithmic feeds?" msgstr "कौन से भाषाएं आपको अपने एल्गोरिदमिक फ़ीड में देखना पसंद करती हैं?" +#: src/view/com/composer/threadgate/ThreadgateBtn.tsx:47 +#: src/view/com/modals/Threadgate.tsx:66 +msgid "Who can reply" +msgstr "" + +#: src/view/com/threadgate/WhoCanReply.tsx:79 +#~ msgid "Who can reply?" +#~ msgstr "" + #: src/view/com/modals/crop-image/CropImage.web.tsx:102 msgid "Wide" msgstr "चौड़ा" -#: src/view/com/composer/Composer.tsx:396 +#: src/view/com/composer/Composer.tsx:403 msgid "Write post" msgstr "पोस्ट लिखो" @@ -2359,7 +2436,7 @@ msgstr "" msgid "You don't have any saved feeds." msgstr "आपके पास कोई सहेजी गई फ़ीड नहीं है." -#: src/view/com/post-thread/PostThread.tsx:378 +#: src/view/com/post-thread/PostThread.tsx:385 msgid "You have blocked the author or you have been blocked by the author." msgstr "आपने लेखक को अवरुद्ध किया है या आपने लेखक द्वारा अवरुद्ध किया है।।" @@ -2423,7 +2500,7 @@ msgstr "आपका होस्टिंग प्रदाता" #: src/view/screens/Settings.tsx:402 #: src/view/shell/desktop/RightNav.tsx:127 -#: src/view/shell/Drawer.tsx:644 +#: src/view/shell/Drawer.tsx:636 msgid "Your invite codes are hidden when logged in using an App Password" msgstr "" @@ -2431,7 +2508,7 @@ msgstr "" msgid "Your posts, likes, and blocks are public. Mutes are private." msgstr "आपकी पोस्ट, पसंद और ब्लॉक सार्वजनिक हैं। म्यूट निजी हैं।।" -#: src/view/com/modals/SwitchAccount.tsx:78 +#: src/view/com/modals/SwitchAccount.tsx:82 msgid "Your profile" msgstr "आपकी प्रोफ़ाइल" @@ -2444,8 +2521,8 @@ msgstr "आपकी प्रोफ़ाइल" #~ msgstr "" #: src/view/screens/Moderation.tsx:220 -msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." -msgstr "" +#~ msgid "Your profile and posts will not be visible to people visiting the Bluesky app or website without having an account and being logged in." +#~ msgstr "" #: src/view/com/auth/create/Step3.tsx:28 msgid "Your user handle" diff --git a/src/state/modals/index.tsx b/src/state/modals/index.tsx index bff27f84d2..81a220d1b3 100644 --- a/src/state/modals/index.tsx +++ b/src/state/modals/index.tsx @@ -6,6 +6,7 @@ import {Image as RNImage} from 'react-native-image-crop-picker' import {ImageModel} from '#/state/models/media/image' import {GalleryModel} from '#/state/models/media/gallery' import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback' +import {ThreadgateSetting} from '../queries/threadgate' export interface ConfirmModal { name: 'confirm' @@ -121,6 +122,12 @@ export interface SelfLabelModal { onChange: (labels: string[]) => void } +export interface ThreadgateModal { + name: 'threadgate' + settings: ThreadgateSetting[] + onChange: (settings: ThreadgateSetting[]) => void +} + export interface ChangeHandleModal { name: 'change-handle' onChanged: () => void @@ -207,6 +214,7 @@ export type Modal = | ServerInputModal | RepostModal | SelfLabelModal + | ThreadgateModal // Bluesky access | WaitlistModal diff --git a/src/state/persisted/legacy.ts b/src/state/persisted/legacy.ts index d702637464..f689c3d063 100644 --- a/src/state/persisted/legacy.ts +++ b/src/state/persisted/legacy.ts @@ -94,7 +94,8 @@ export function transform(legacy: Partial): Schema { legacy.preferences?.postLanguageHistory || defaults.languagePrefs.postLanguageHistory, appLanguage: - legacy.preferences?.postLanguage || defaults.languagePrefs.appLanguage, + legacy.preferences?.primaryLanguage || + defaults.languagePrefs.appLanguage, }, requireAltTextEnabled: legacy.preferences?.requireAltTextEnabled || diff --git a/src/state/preferences/languages.tsx b/src/state/preferences/languages.tsx index 8e779cfe53..df774c05e2 100644 --- a/src/state/preferences/languages.tsx +++ b/src/state/preferences/languages.tsx @@ -1,5 +1,6 @@ import React from 'react' import * as persisted from '#/state/persisted' +import {AppLanguage} from '#/locale/languages' type SetStateCb = ( s: persisted.Schema['languagePrefs'], @@ -11,7 +12,7 @@ type ApiContext = { toggleContentLanguage: (code2: string) => void togglePostLanguage: (code2: string) => void savePostLanguageToHistory: () => void - setAppLanguage: (code2: string) => void + setAppLanguage: (code2: AppLanguage) => void } const stateContext = React.createContext( @@ -23,7 +24,7 @@ const apiContext = React.createContext({ toggleContentLanguage: (_: string) => {}, togglePostLanguage: (_: string) => {}, savePostLanguageToHistory: () => {}, - setAppLanguage: (_: string) => {}, + setAppLanguage: (_: AppLanguage) => {}, }) export function Provider({children}: React.PropsWithChildren<{}>) { @@ -106,7 +107,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { .slice(0, 6), })) }, - setAppLanguage(code2: string) { + setAppLanguage(code2: AppLanguage) { setStateWrapped(s => ({...s, appLanguage: code2})) }, }), diff --git a/src/state/queries/feed.ts b/src/state/queries/feed.ts index 75aac5cdbf..e431643e71 100644 --- a/src/state/queries/feed.ts +++ b/src/state/queries/feed.ts @@ -15,6 +15,7 @@ import { AppBskyUnspeccedGetPopularFeedGenerators, } from '@atproto/api' +import {logger} from '#/logger' import {router} from '#/routes' import {sanitizeDisplayName} from '#/lib/strings/display-names' import {sanitizeHandle} from '#/lib/strings/handles' @@ -289,30 +290,42 @@ export function usePinnedFeedsInfos(): { reqs.push(cached) } else { reqs.push( - queryClient.fetchQuery({ - queryKey: feedSourceInfoQueryKey({uri}), - queryFn: async () => { - const type = getFeedTypeFromUri(uri) - - if (type === 'feed') { - const res = await getAgent().app.bsky.feed.getFeedGenerator({ - feed: uri, - }) - return hydrateFeedGenerator(res.data.view) - } else { - const res = await getAgent().app.bsky.graph.getList({ - list: uri, - limit: 1, - }) - return hydrateList(res.data.list) - } - }, - }), + (async () => { + // these requests can fail, need to filter those out + try { + return await queryClient.fetchQuery({ + queryKey: feedSourceInfoQueryKey({uri}), + queryFn: async () => { + const type = getFeedTypeFromUri(uri) + + if (type === 'feed') { + const res = + await getAgent().app.bsky.feed.getFeedGenerator({ + feed: uri, + }) + return hydrateFeedGenerator(res.data.view) + } else { + const res = await getAgent().app.bsky.graph.getList({ + list: uri, + limit: 1, + }) + return hydrateList(res.data.list) + } + }, + }) + } catch (e) { + logger.warn(`usePinnedFeedsInfos: failed to fetch ${uri}`, { + error: e, + }) + } + })(), ) } } - const views = await Promise.all(reqs) + const views = (await Promise.all(reqs)).filter( + Boolean, + ) as FeedSourceInfo[] setTabs([FOLLOWING_FEED_STUB].concat(views)) } diff --git a/src/state/queries/list.ts b/src/state/queries/list.ts index 550baecb3d..013a690762 100644 --- a/src/state/queries/list.ts +++ b/src/state/queries/list.ts @@ -230,6 +230,10 @@ export function useListMuteMutation() { } else { await getAgent().unmuteModList(uri) } + + await whenAppViewReady(uri, (v: AppBskyGraphGetList.Response) => { + return Boolean(v?.data.list.viewer?.muted) === mute + }) }, onSuccess(data, variables) { queryClient.invalidateQueries({ @@ -248,6 +252,12 @@ export function useListBlockMutation() { } else { await getAgent().unblockModList(uri) } + + await whenAppViewReady(uri, (v: AppBskyGraphGetList.Response) => { + return block + ? typeof v?.data.list.viewer?.blocked === 'string' + : !v?.data.list.viewer?.blocked + }) }, onSuccess(data, variables) { queryClient.invalidateQueries({ diff --git a/src/state/queries/my-lists.ts b/src/state/queries/my-lists.ts index 3265cb21e3..d53e130327 100644 --- a/src/state/queries/my-lists.ts +++ b/src/state/queries/my-lists.ts @@ -5,7 +5,11 @@ import {accumulate} from '#/lib/async/accumulate' import {useSession, getAgent} from '#/state/session' import {STALE} from '#/state/queries' -export type MyListsFilter = 'all' | 'curate' | 'mod' +export type MyListsFilter = + | 'all' + | 'curate' + | 'mod' + | 'all-including-subscribed' export const RQKEY = (filter: MyListsFilter) => ['my-lists', filter] export function useMyListsQuery(filter: MyListsFilter) { @@ -29,7 +33,7 @@ export function useMyListsQuery(filter: MyListsFilter) { })), ), ] - if (filter === 'all' || filter === 'mod') { + if (filter === 'all-including-subscribed' || filter === 'mod') { promises.push( accumulate(cursor => getAgent() diff --git a/src/state/queries/notifications/feed.ts b/src/state/queries/notifications/feed.ts index a74670b5b4..1610fc0bfb 100644 --- a/src/state/queries/notifications/feed.ts +++ b/src/state/queries/notifications/feed.ts @@ -16,7 +16,7 @@ * 3. Don't call this query's `refetch()` if you're trying to sync latest; call `checkUnread()` instead. */ -import {useEffect} from 'react' +import {useEffect, useRef} from 'react' import {AppBskyFeedDefs} from '@atproto/api' import { useInfiniteQuery, @@ -49,6 +49,8 @@ export function useNotificationFeedQuery(opts?: {enabled?: boolean}) { const threadMutes = useMutedThreads() const unreads = useUnreadNotificationsApi() const enabled = opts?.enabled !== false + // state tracked across page fetches + const pageState = useRef({pageNum: 0, hasMarkedRead: false}) const query = useInfiniteQuery< FeedPage, @@ -60,17 +62,45 @@ export function useNotificationFeedQuery(opts?: {enabled?: boolean}) { staleTime: STALE.INFINITY, queryKey: RQKEY(), async queryFn({pageParam}: {pageParam: RQPageParam}) { - let page = await fetchPage({ - limit: PAGE_SIZE, - cursor: pageParam, - queryClient, - moderationOpts, - threadMutes, - }) + let page + if (!pageParam) { + // for the first page, we check the cached page held by the unread-checker first + page = unreads.getCachedUnreadPage() + // reset the page state + pageState.current = {pageNum: 0, hasMarkedRead: false} + } + if (!page) { + page = await fetchPage({ + limit: PAGE_SIZE, + cursor: pageParam, + queryClient, + moderationOpts, + threadMutes, + fetchAdditionalData: true, + }) + } - // if the first page has an unread, mark all read - if (!pageParam && page.items[0] && !page.items[0].notification.isRead) { - unreads.markAllRead() + // NOTE + // this section checks to see if we need to mark notifs read + // we want to wait until we've seen a read notification because + // of a timing challenge; marking read on the first page would + // cause subsequent pages of unread notifs to incorrectly come + // back as "read". we use page 6 as an abort condition, which means + // after ~180 notifs we give up on tracking unread state correctly + // -prf + if (!pageState.current.hasMarkedRead) { + let hasMarkedRead = false + if ( + pageState.current.pageNum > 5 || + page.items.some(item => item.notification.isRead) + ) { + unreads.markAllRead() + hasMarkedRead = true + } + pageState.current = { + pageNum: pageState.current.pageNum + 1, + hasMarkedRead, + } } return page diff --git a/src/state/queries/notifications/types.ts b/src/state/queries/notifications/types.ts index 0e88f1071d..b523411150 100644 --- a/src/state/queries/notifications/types.ts +++ b/src/state/queries/notifications/types.ts @@ -28,7 +28,10 @@ export interface FeedPage { } export interface CachedFeedPage { - sessDid: string // used to invalidate on session changes + /** + * if true, the cached page is recent enough to use as the response + */ + usableInFeed: boolean syncedAt: Date data: FeedPage | undefined } diff --git a/src/state/queries/notifications/unread.tsx b/src/state/queries/notifications/unread.tsx index 6c130aaea1..a189f20e42 100644 --- a/src/state/queries/notifications/unread.tsx +++ b/src/state/queries/notifications/unread.tsx @@ -37,7 +37,7 @@ const apiContext = React.createContext({ }) export function Provider({children}: React.PropsWithChildren<{}>) { - const {hasSession, currentAccount} = useSession() + const {hasSession} = useSession() const queryClient = useQueryClient() const moderationOpts = useModerationOpts() const threadMutes = useMutedThreads() @@ -46,7 +46,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { const checkUnreadRef = React.useRef(null) const cacheRef = React.useRef({ - sessDid: currentAccount?.did || '', + usableInFeed: false, syncedAt: new Date(), data: undefined, }) @@ -65,7 +65,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { React.useEffect(() => { const listener = ({data}: MessageEvent) => { cacheRef.current = { - sessDid: currentAccount?.did || '', + usableInFeed: false, syncedAt: new Date(), data: undefined, } @@ -75,7 +75,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { return () => { broadcast.removeEventListener('message', listener) } - }, [setNumUnread, currentAccount]) + }, [setNumUnread]) // create API const api = React.useMemo(() => { @@ -102,6 +102,10 @@ export function Provider({children}: React.PropsWithChildren<{}>) { queryClient, moderationOpts, threadMutes, + + // only fetch subjects when the page is going to be used + // in the notifications query, otherwise skip it + fetchAdditionalData: !!invalidate, }) const unreadCount = countUnread(page) const unreadCountStr = @@ -119,7 +123,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { const lastIndexed = page.items[0] && new Date(page.items[0].notification.indexedAt) cacheRef.current = { - sessDid: currentAccount?.did || '', + usableInFeed: !!invalidate, // will be used immediately data: page, syncedAt: !lastIndexed || now > lastIndexed ? now : lastIndexed, } @@ -136,14 +140,13 @@ export function Provider({children}: React.PropsWithChildren<{}>) { }, getCachedUnreadPage() { - // return cached page if was for the current user - // (protects against session changes serving data from the past session) - if (cacheRef.current.sessDid === currentAccount?.did) { + // return cached page if it's marked as fresh enough + if (cacheRef.current.usableInFeed) { return cacheRef.current.data } }, } - }, [setNumUnread, queryClient, moderationOpts, threadMutes, currentAccount]) + }, [setNumUnread, queryClient, moderationOpts, threadMutes]) checkUnreadRef.current = api.checkUnread return ( diff --git a/src/state/queries/notifications/util.ts b/src/state/queries/notifications/util.ts index b8f320473f..9fb25867aa 100644 --- a/src/state/queries/notifications/util.ts +++ b/src/state/queries/notifications/util.ts @@ -27,12 +27,14 @@ export async function fetchPage({ queryClient, moderationOpts, threadMutes, + fetchAdditionalData, }: { cursor: string | undefined limit: number queryClient: QueryClient moderationOpts: ModerationOpts | undefined threadMutes: string[] + fetchAdditionalData: boolean }): Promise { const res = await getAgent().listNotifications({ limit, @@ -49,12 +51,14 @@ export async function fetchPage({ // we fetch subjects of notifications (usually posts) now instead of lazily // in the UI to avoid relayouts - const subjects = await fetchSubjects(notifsGrouped) - for (const notif of notifsGrouped) { - if (notif.subjectUri) { - notif.subject = subjects.get(notif.subjectUri) - if (notif.subject) { - precacheResolvedUri(queryClient, notif.subject.author) // precache the handle->did resolution + if (fetchAdditionalData) { + const subjects = await fetchSubjects(notifsGrouped) + for (const notif of notifsGrouped) { + if (notif.subjectUri) { + notif.subject = subjects.get(notif.subjectUri) + if (notif.subject) { + precacheResolvedUri(queryClient, notif.subject.author) // precache the handle->did resolution + } } } } @@ -119,8 +123,7 @@ function groupNotifications( Math.abs(ts2 - ts) < MS_2DAY && notif.reason === groupedNotif.notification.reason && notif.reasonSubject === groupedNotif.notification.reasonSubject && - notif.author.did !== groupedNotif.notification.author.did && - notif.isRead === groupedNotif.notification.isRead + notif.author.did !== groupedNotif.notification.author.did ) { groupedNotif.additional = groupedNotif.additional || [] groupedNotif.additional.push(notif) diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index 9bd1dacb3a..7847c72021 100644 --- a/src/state/queries/post-feed.ts +++ b/src/state/queries/post-feed.ts @@ -1,4 +1,4 @@ -import {useCallback, useEffect} from 'react' +import React, {useCallback, useEffect} from 'react' import { AppBskyFeedDefs, AppBskyFeedPost, @@ -35,6 +35,7 @@ type ActorDid = string type AuthorFilter = | 'posts_with_replies' | 'posts_no_replies' + | 'posts_and_author_threads' | 'posts_with_media' type FeedUri = string type ListUri = string @@ -97,6 +98,22 @@ export function usePostFeedQuery( const feedTuners = useFeedTuners(feedDesc) const moderationOpts = useModerationOpts() const enabled = opts?.enabled !== false && Boolean(moderationOpts) + const lastRun = React.useRef<{ + data: InfiniteData + args: typeof selectArgs + result: InfiniteData + } | null>(null) + + // Make sure this doesn't invalidate unless really needed. + const selectArgs = React.useMemo( + () => ({ + feedTuners, + disableTuner: params?.disableTuner, + moderationOpts, + ignoreFilterFor: opts?.ignoreFilterFor, + }), + [feedTuners, params?.disableTuner, moderationOpts, opts?.ignoreFilterFor], + ) const query = useInfiniteQuery< FeedPageUnselected, @@ -147,69 +164,116 @@ export function usePostFeedQuery( : undefined, select: useCallback( (data: InfiniteData) => { - const tuner = params?.disableTuner + // If the selection depends on some data, that data should + // be included in the selectArgs object and read here. + const {feedTuners, disableTuner, moderationOpts, ignoreFilterFor} = + selectArgs + + const tuner = disableTuner ? new NoopFeedTuner() : new FeedTuner(feedTuners) - return { + + // Keep track of the last run and whether we can reuse + // some already selected pages from there. + let reusedPages = [] + if (lastRun.current) { + const { + data: lastData, + args: lastArgs, + result: lastResult, + } = lastRun.current + let canReuse = true + for (let key in selectArgs) { + if (selectArgs.hasOwnProperty(key)) { + if ((selectArgs as any)[key] !== (lastArgs as any)[key]) { + // Can't do reuse anything if any input has changed. + canReuse = false + break + } + } + } + if (canReuse) { + for (let i = 0; i < data.pages.length; i++) { + if (data.pages[i] && lastData.pages[i] === data.pages[i]) { + reusedPages.push(lastResult.pages[i]) + // Keep the tuner in sync so that the end result is deterministic. + tuner.tune(lastData.pages[i].feed) + continue + } + // Stop as soon as pages stop matching up. + break + } + } + } + + const result = { pageParams: data.pageParams, - pages: data.pages.map(page => ({ - api: page.api, - tuner, - cursor: page.cursor, - slices: tuner - .tune(page.feed) - .map(slice => { - const moderations = slice.items.map(item => - moderatePost(item.post, moderationOpts!), - ) - - // apply moderation filter - for (let i = 0; i < slice.items.length; i++) { - if ( - moderations[i]?.content.filter && - slice.items[i].post.author.did !== opts?.ignoreFilterFor - ) { - return undefined + pages: [ + ...reusedPages, + ...data.pages.slice(reusedPages.length).map(page => ({ + api: page.api, + tuner, + cursor: page.cursor, + slices: tuner + .tune(page.feed) + .map(slice => { + const moderations = slice.items.map(item => + moderatePost(item.post, moderationOpts!), + ) + + // apply moderation filter + for (let i = 0; i < slice.items.length; i++) { + if ( + moderations[i]?.content.filter && + slice.items[i].post.author.did !== ignoreFilterFor + ) { + return undefined + } } - } - - return { - _reactKey: slice._reactKey, - rootUri: slice.rootItem.post.uri, - isThread: - slice.items.length > 1 && - slice.items.every( - item => - item.post.author.did === slice.items[0].post.author.did, - ), - items: slice.items - .map((item, i) => { - if ( - AppBskyFeedPost.isRecord(item.post.record) && - AppBskyFeedPost.validateRecord(item.post.record).success - ) { - return { - _reactKey: `${slice._reactKey}-${i}`, - uri: item.post.uri, - post: item.post, - record: item.post.record, - reason: - i === 0 && slice.source - ? slice.source - : item.reason, - moderation: moderations[i], + + return { + _reactKey: slice._reactKey, + rootUri: slice.rootItem.post.uri, + isThread: + slice.items.length > 1 && + slice.items.every( + item => + item.post.author.did === + slice.items[0].post.author.did, + ), + items: slice.items + .map((item, i) => { + if ( + AppBskyFeedPost.isRecord(item.post.record) && + AppBskyFeedPost.validateRecord(item.post.record) + .success + ) { + return { + _reactKey: `${slice._reactKey}-${i}`, + uri: item.post.uri, + post: item.post, + record: item.post.record, + reason: + i === 0 && slice.source + ? slice.source + : item.reason, + moderation: moderations[i], + } } - } - return undefined - }) - .filter(Boolean) as FeedPostSliceItem[], - } - }) - .filter(Boolean) as FeedPostSlice[], - })), + return undefined + }) + .filter(Boolean) as FeedPostSliceItem[], + } + }) + .filter(Boolean) as FeedPostSlice[], + })), + ], } + // Save for memoization. + lastRun.current = {data, result, args: selectArgs} + return result }, - [feedTuners, params?.disableTuner, moderationOpts, opts?.ignoreFilterFor], + [selectArgs /* Don't change. Everything needs to go into selectArgs. */], ), }) diff --git a/src/state/queries/threadgate.ts b/src/state/queries/threadgate.ts new file mode 100644 index 0000000000..4891175825 --- /dev/null +++ b/src/state/queries/threadgate.ts @@ -0,0 +1,5 @@ +export type ThreadgateSetting = + | {type: 'nobody'} + | {type: 'mention'} + | {type: 'following'} + | {type: 'list'; list: string} diff --git a/src/state/queries/util.ts b/src/state/queries/util.ts index b259b19222..f3a87ae5db 100644 --- a/src/state/queries/util.ts +++ b/src/state/queries/util.ts @@ -25,26 +25,18 @@ export function truncateAndInvalidate( export function getEmbeddedPost( v: unknown, ): AppBskyEmbedRecord.ViewRecord | undefined { - if ( - AppBskyEmbedRecord.isView(v) && - AppBskyEmbedRecord.validateView(v).success - ) { + if (AppBskyEmbedRecord.isView(v)) { if ( AppBskyEmbedRecord.isViewRecord(v.record) && - AppBskyFeedPost.isRecord(v.record.value) && - AppBskyFeedPost.validateRecord(v.record.value).success + AppBskyFeedPost.isRecord(v.record.value) ) { return v.record } } - if ( - AppBskyEmbedRecordWithMedia.isView(v) && - AppBskyEmbedRecordWithMedia.validateView(v).success - ) { + if (AppBskyEmbedRecordWithMedia.isView(v)) { if ( AppBskyEmbedRecord.isViewRecord(v.record.record) && - AppBskyFeedPost.isRecord(v.record.record.value) && - AppBskyFeedPost.validateRecord(v.record.record.value).success + AppBskyFeedPost.isRecord(v.record.record.value) ) { return v.record.record } diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx index d4cd2fcd2a..56208bc70c 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -28,6 +28,7 @@ export function getAgent() { export type SessionAccount = persisted.PersistedAccount export type SessionState = { + isInitialLoad: boolean isSwitchingAccounts: boolean accounts: SessionAccount[] currentAccount: SessionAccount | undefined @@ -75,6 +76,7 @@ export type ApiContext = { } const StateContext = React.createContext({ + isInitialLoad: true, isSwitchingAccounts: false, accounts: [], currentAccount: undefined, @@ -150,6 +152,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { const queryClient = useQueryClient() const isDirty = React.useRef(false) const [state, setState] = React.useState({ + isInitialLoad: true, isSwitchingAccounts: false, accounts: persisted.get('session').accounts, currentAccount: undefined, // assume logged out to start @@ -434,6 +437,11 @@ export function Provider({children}: React.PropsWithChildren<{}>) { } } catch (e) { logger.error(`session: resumeSession failed`, {error: e}) + } finally { + setState(s => ({ + ...s, + isInitialLoad: false, + })) } }, [initSession], diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index d8af6d0ce8..f510be0be5 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -14,7 +14,7 @@ import { import {useSafeAreaInsets} from 'react-native-safe-area-context' import LinearGradient from 'react-native-linear-gradient' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' -import {AppBskyFeedGetPosts, RichText} from '@atproto/api' +import {RichText} from '@atproto/api' import {useAnalytics} from 'lib/analytics/analytics' import {useIsKeyboardVisible} from 'lib/hooks/useIsKeyboardVisible' import {ExternalEmbed} from './ExternalEmbed' @@ -35,6 +35,7 @@ import {shortenLinks} from 'lib/strings/rich-text-manip' import {toShortUrl} from 'lib/strings/url-helpers' import {SelectPhotoBtn} from './photos/SelectPhotoBtn' import {OpenCameraBtn} from './photos/OpenCameraBtn' +import {ThreadgateBtn} from './threadgate/ThreadgateBtn' import {usePalette} from 'lib/hooks/usePalette' import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries' import {useExternalLinkFetch} from './useExternalLinkFetch' @@ -59,8 +60,8 @@ import { import {useSession, getAgent} from '#/state/session' import {useProfileQuery} from '#/state/queries/profile' import {useComposerControls} from '#/state/shell/composer' -import {until} from '#/lib/async/until' import {emitPostCreated} from '#/state/events' +import {ThreadgateSetting} from '#/state/queries/threadgate' type Props = ComposerOpts export const ComposePost = observer(function ComposePost({ @@ -105,6 +106,7 @@ export const ComposePost = observer(function ComposePost({ ) const {extLink, setExtLink} = useExternalLinkFetch({setQuote}) const [labels, setLabels] = useState([]) + const [threadgate, setThreadgate] = useState([]) const [suggestedLinks, setSuggestedLinks] = useState>(new Set()) const gallery = useMemo(() => new GalleryModel(), []) const onClose = useCallback(() => { @@ -220,6 +222,7 @@ export const ComposePost = observer(function ComposePost({ quote, extLink, labels, + threadgate, onStateChange: setProcessingState, langs: toPostLanguages(langPrefs.postLanguage), }) @@ -242,9 +245,7 @@ export const ComposePost = observer(function ComposePost({ if (replyTo && replyTo.uri) track('Post:Reply') } if (postUri && !replyTo) { - whenAppViewReady(postUri).then(() => { - emitPostCreated() - }) + emitPostCreated() } setLangPrefs.savePostLanguageToHistory() onPost?.() @@ -296,6 +297,12 @@ export const ComposePost = observer(function ComposePost({ onChange={setLabels} hasMedia={hasMedia} /> + {replyTo ? null : ( + + )} {canPost ? ( !!res.data.posts[0], - () => - getAgent().getPosts({ - uris: [uri], - }), - ) -} diff --git a/src/view/com/composer/Prompt.tsx b/src/view/com/composer/Prompt.tsx index ae055f9ac7..9964359acb 100644 --- a/src/view/com/composer/Prompt.tsx +++ b/src/view/com/composer/Prompt.tsx @@ -49,6 +49,6 @@ const styles = StyleSheet.create({ paddingLeft: 12, }, labelDesktopWeb: { - paddingLeft: 20, + paddingLeft: 12, }, }) diff --git a/src/view/com/composer/labels/LabelsBtn.tsx b/src/view/com/composer/labels/LabelsBtn.tsx index a106846918..b880dd3306 100644 --- a/src/view/com/composer/labels/LabelsBtn.tsx +++ b/src/view/com/composer/labels/LabelsBtn.tsx @@ -38,7 +38,7 @@ export function LabelsBtn({ } openModal({name: 'self-label', labels, hasMedia, onChange}) }}> - + {labels.length > 0 ? ( void +}) { + const pal = usePalette('default') + const {track} = useAnalytics() + const {_} = useLingui() + const {openModal} = useModalControls() + + const onPress = () => { + track('Composer:ThreadgateOpened') + if (isNative && Keyboard.isVisible()) { + Keyboard.dismiss() + } + openModal({ + name: 'threadgate', + settings: threadgate, + onChange, + }) + } + + return ( + + + {threadgate.length ? ( + + ) : null} + + ) +} + +const styles = StyleSheet.create({ + button: { + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: 6, + gap: 4, + }, +}) diff --git a/src/view/com/feeds/FeedSourceCard.tsx b/src/view/com/feeds/FeedSourceCard.tsx index 460816fc1d..99e2b474f6 100644 --- a/src/view/com/feeds/FeedSourceCard.tsx +++ b/src/view/com/feeds/FeedSourceCard.tsx @@ -32,30 +32,23 @@ export function FeedSourceCard({ showSaveBtn = false, showDescription = false, showLikes = false, - LoadingComponent, pinOnSave = false, + showMinimalPlaceholder, }: { feedUri: string style?: StyleProp showSaveBtn?: boolean showDescription?: boolean showLikes?: boolean - LoadingComponent?: JSX.Element pinOnSave?: boolean + showMinimalPlaceholder?: boolean }) { const {data: preferences} = usePreferencesQuery() const {data: feed} = useFeedSourceInfoQuery({uri: feedUri}) - if (!feed || !preferences) { - return LoadingComponent ? ( - LoadingComponent - ) : ( - - ) - } - return ( ) } export function FeedSourceCardLoaded({ + feedUri, feed, preferences, style, @@ -75,14 +70,17 @@ export function FeedSourceCardLoaded({ showDescription = false, showLikes = false, pinOnSave = false, + showMinimalPlaceholder, }: { - feed: FeedSourceInfo - preferences: UsePreferencesQueryResponse + feedUri: string + feed?: FeedSourceInfo + preferences?: UsePreferencesQueryResponse style?: StyleProp showSaveBtn?: boolean showDescription?: boolean showLikes?: boolean pinOnSave?: boolean + showMinimalPlaceholder?: boolean }) { const pal = usePalette('default') const {_} = useLingui() @@ -95,7 +93,7 @@ export function FeedSourceCardLoaded({ useRemoveFeedMutation() const {isPending: isPinPending, mutateAsync: pinFeed} = usePinFeedMutation() - const isSaved = Boolean(preferences?.feeds?.saved?.includes(feed.uri)) + const isSaved = Boolean(preferences?.feeds?.saved?.includes(feed?.uri || '')) const onToggleSaved = React.useCallback(async () => { // Only feeds can be un/saved, lists are handled elsewhere @@ -105,7 +103,7 @@ export function FeedSourceCardLoaded({ openModal({ name: 'confirm', title: _(msg`Remove from my feeds`), - message: _(msg`Remove ${feed.displayName} from my feeds?`), + message: _(msg`Remove ${feed?.displayName} from my feeds?`), onPressConfirm: async () => { try { await removeFeed({uri: feed.uri}) @@ -132,7 +130,70 @@ export function FeedSourceCardLoaded({ } }, [isSaved, openModal, feed, removeFeed, saveFeed, _, pinOnSave, pinFeed]) - if (!feed || !preferences) return null + /* + * LOAD STATE + * + * This state also captures the scenario where a feed can't load for whatever + * reason. + */ + if (!feed || !preferences) + return ( + + {showMinimalPlaceholder ? ( + + ) : ( + + )} + + {showSaveBtn && ( + { + openModal({ + name: 'confirm', + title: _(msg`Remove from my feeds`), + message: _(msg`Remove this feed from my feeds?`), + onPressConfirm: async () => { + try { + await removeFeed({uri: feedUri}) + // await item.unsave() + Toast.show('Removed from my feeds') + } catch (e) { + Toast.show('There was an issue contacting your server') + logger.error('Failed to unsave feed', {error: e}) + } + }, + }) + }} + hitSlop={15} + style={styles.btn}> + + + )} + + ) return ( ( - + {isFetching && } ), diff --git a/src/view/com/lists/ProfileLists.tsx b/src/view/com/lists/ProfileLists.tsx index 0609c0e21e..1bd9d188ff 100644 --- a/src/view/com/lists/ProfileLists.tsx +++ b/src/view/com/lists/ProfileLists.tsx @@ -20,7 +20,7 @@ import {OnScrollHandler} from '#/lib/hooks/useOnMainScroll' import {logger} from '#/logger' import {Trans} from '@lingui/macro' import {cleanError} from '#/lib/strings/errors' -import {useAnimatedScrollHandler} from 'react-native-reanimated' +import {useAnimatedScrollHandler} from '#/lib/hooks/useAnimatedScrollHandler_FIXED' import {useTheme} from '#/lib/ThemeContext' import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder' import {isNative} from '#/platform/detection' diff --git a/src/view/com/modals/Modal.tsx b/src/view/com/modals/Modal.tsx index 0384e301ca..90629d33d3 100644 --- a/src/view/com/modals/Modal.tsx +++ b/src/view/com/modals/Modal.tsx @@ -16,6 +16,7 @@ import * as ProfilePreviewModal from './ProfilePreview' import * as ServerInputModal from './ServerInput' import * as RepostModal from './Repost' import * as SelfLabelModal from './SelfLabel' +import * as ThreadgateModal from './Threadgate' import * as CreateOrEditListModal from './CreateOrEditList' import * as UserAddRemoveListsModal from './UserAddRemoveLists' import * as ListAddUserModal from './ListAddRemoveUsers' @@ -127,6 +128,9 @@ export function ModalsContainer() { } else if (activeModal?.name === 'self-label') { snapPoints = SelfLabelModal.snapPoints element = + } else if (activeModal?.name === 'threadgate') { + snapPoints = ThreadgateModal.snapPoints + element = } else if (activeModal?.name === 'alt-text-image') { snapPoints = AltImageModal.snapPoints element = diff --git a/src/view/com/modals/Modal.web.tsx b/src/view/com/modals/Modal.web.tsx index ce1e67fae1..12138f54d4 100644 --- a/src/view/com/modals/Modal.web.tsx +++ b/src/view/com/modals/Modal.web.tsx @@ -18,6 +18,7 @@ import * as ListAddUserModal from './ListAddRemoveUsers' import * as DeleteAccountModal from './DeleteAccount' import * as RepostModal from './Repost' import * as SelfLabelModal from './SelfLabel' +import * as ThreadgateModal from './Threadgate' import * as CropImageModal from './crop-image/CropImage.web' import * as AltTextImageModal from './AltImage' import * as EditImageModal from './EditImage' @@ -98,6 +99,8 @@ function Modal({modal}: {modal: ModalIface}) { element = } else if (modal.name === 'self-label') { element = + } else if (modal.name === 'threadgate') { + element = } else if (modal.name === 'change-handle') { element = } else if (modal.name === 'waitlist') { diff --git a/src/view/com/modals/SwitchAccount.tsx b/src/view/com/modals/SwitchAccount.tsx index 38e1ce1e0f..37691e7172 100644 --- a/src/view/com/modals/SwitchAccount.tsx +++ b/src/view/com/modals/SwitchAccount.tsx @@ -20,6 +20,7 @@ import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useSession, useSessionApi, SessionAccount} from '#/state/session' import {useProfileQuery} from '#/state/queries/profile' +import {useCloseAllActiveElements} from '#/state/util' export const snapPoints = ['40%', '90%'] @@ -32,11 +33,14 @@ function SwitchAccountCard({account}: {account: SessionAccount}) { const {data: profile} = useProfileQuery({did: account.did}) const isCurrentAccount = account.did === currentAccount?.did const {onPressSwitchAccount} = useAccountSwitcher() + const closeAllActiveElements = useCloseAllActiveElements() const onPressSignout = React.useCallback(() => { track('Settings:SignOutButtonClicked') - logout() - }, [track, logout]) + closeAllActiveElements() + // needs to be in timeout or the modal re-opens + setTimeout(() => logout(), 0) + }, [track, logout, closeAllActiveElements]) const contents = ( diff --git a/src/view/com/modals/Threadgate.tsx b/src/view/com/modals/Threadgate.tsx new file mode 100644 index 0000000000..9d78a2e6dc --- /dev/null +++ b/src/view/com/modals/Threadgate.tsx @@ -0,0 +1,204 @@ +import React, {useState} from 'react' +import { + Pressable, + StyleProp, + StyleSheet, + TouchableOpacity, + View, + ViewStyle, +} from 'react-native' +import {Text} from '../util/text/Text' +import {s, colors} from 'lib/styles' +import {usePalette} from 'lib/hooks/usePalette' +import {isWeb} from 'platform/detection' +import {ScrollView} from 'view/com/modals/util' +import {Trans, msg} from '@lingui/macro' +import {useLingui} from '@lingui/react' +import {useModalControls} from '#/state/modals' +import {ThreadgateSetting} from '#/state/queries/threadgate' +import {useMyListsQuery} from '#/state/queries/my-lists' +import isEqual from 'lodash.isequal' +import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' + +export const snapPoints = ['60%'] + +export function Component({ + settings, + onChange, +}: { + settings: ThreadgateSetting[] + onChange: (settings: ThreadgateSetting[]) => void +}) { + const pal = usePalette('default') + const {closeModal} = useModalControls() + const [selected, setSelected] = useState(settings) + const {_} = useLingui() + const {data: lists} = useMyListsQuery('curate') + + const onPressEverybody = () => { + setSelected([]) + onChange([]) + } + + const onPressNobody = () => { + setSelected([{type: 'nobody'}]) + onChange([{type: 'nobody'}]) + } + + const onPressAudience = (setting: ThreadgateSetting) => { + // remove nobody + let newSelected = selected.filter(v => v.type !== 'nobody') + // toggle + const i = newSelected.findIndex(v => isEqual(v, setting)) + if (i === -1) { + newSelected.push(setting) + } else { + newSelected.splice(i, 1) + } + setSelected(newSelected) + onChange(newSelected) + } + + return ( + + + + Who can reply + + + + + + Choose "Everybody" or "Nobody" + + + + v.type === 'nobody')} + onPress={onPressNobody} + style={{flex: 1}} + /> + + + Or combine these options: + + + v.type === 'mention')} + onPress={() => onPressAudience({type: 'mention'})} + /> + v.type === 'following')} + onPress={() => onPressAudience({type: 'following'})} + /> + {lists?.length + ? lists.map(list => ( + v.type === 'list' && v.list === list.uri, + ) + } + onPress={() => + onPressAudience({type: 'list', list: list.uri}) + } + /> + )) + : null} + + + + + { + closeModal() + }} + style={styles.btn} + accessibilityRole="button" + accessibilityLabel={_(msg`Done`)} + accessibilityHint=""> + + Done + + + + + ) +} + +function Selectable({ + label, + isSelected, + onPress, + style, +}: { + label: string + isSelected: boolean + onPress: () => void + style?: StyleProp +}) { + const pal = usePalette(isSelected ? 'inverted' : 'default') + return ( + + + {label} + + {isSelected ? ( + + ) : null} + + ) +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + paddingBottom: isWeb ? 0 : 40, + }, + titleSection: { + paddingTop: isWeb ? 0 : 4, + }, + title: { + textAlign: 'center', + fontWeight: '600', + }, + description: { + textAlign: 'center', + paddingVertical: 16, + }, + selectable: { + flexDirection: 'row', + justifyContent: 'space-between', + paddingHorizontal: 18, + paddingVertical: 16, + borderWidth: 1, + borderRadius: 6, + }, + btn: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 32, + padding: 14, + backgroundColor: colors.blue3, + }, + btnContainer: { + paddingTop: 20, + paddingHorizontal: 20, + }, +}) diff --git a/src/view/com/post-thread/PostThread.tsx b/src/view/com/post-thread/PostThread.tsx index cf43d2055f..051bc7849f 100644 --- a/src/view/com/post-thread/PostThread.tsx +++ b/src/view/com/post-thread/PostThread.tsx @@ -1,4 +1,4 @@ -import React, {useRef} from 'react' +import React, {useEffect, useRef} from 'react' import { ActivityIndicator, Pressable, @@ -64,9 +64,11 @@ type YieldedItem = export function PostThread({ uri, + onCanReply, onPressReply, }: { uri: string | undefined + onCanReply: (canReply: boolean) => void onPressReply: () => void }) { const { @@ -86,6 +88,11 @@ export function PostThread({ rootPost.author.displayName || `@${rootPost.author.handle}`, )}: "${rootPostRecord?.text}"`, ) + useEffect(() => { + if (rootPost) { + onCanReply(!rootPost.viewer?.replyDisabled) + } + }, [rootPost, onCanReply]) if (isError || AppBskyFeedDefs.isNotFoundPost(thread)) { return ( @@ -468,7 +475,7 @@ function* flattenThreadSkeleton( yield PARENT_SPINNER } yield node - if (node.ctx.isHighlightedPost) { + if (node.ctx.isHighlightedPost && !node.post.viewer?.replyDisabled) { yield REPLY_PROMPT } if (node.replies?.length) { diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx index a2aa3716ea..2636fdfbdf 100644 --- a/src/view/com/post-thread/PostThreadItem.tsx +++ b/src/view/com/post-thread/PostThreadItem.tsx @@ -44,6 +44,7 @@ import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow' import {ThreadPost} from '#/state/queries/post-thread' import {LabelInfo} from '../util/moderation/LabelInfo' import {useSession} from '#/state/session' +import {WhoCanReply} from '../threadgate/WhoCanReply' export function PostThreadItem({ post, @@ -441,6 +442,7 @@ let PostThreadItemLoaded = ({ + ) } else { @@ -450,164 +452,174 @@ let PostThreadItemLoaded = ({ const isThreadedChildAdjacentBot = isThreadedChild && nextPost?.ctx.depth === depth return ( - - - - - - - {!isThreadedChild && showParentReplyLine && ( - - )} - - - - - {!isThreadedChild && ( - - + <> + + + - {showChildReplyLine && ( + + + {!isThreadedChild && showParentReplyLine && ( )} - )} + - - - - {richText?.text ? ( - - + {!isThreadedChild && ( + + + + {showChildReplyLine && ( + + )} - ) : undefined} - {limitLines ? ( - + - ) : undefined} - {post.embed && ( - - + {richText?.text ? ( + + + + ) : undefined} + {limitLines ? ( + + ) : undefined} + {post.embed && ( + - - )} - + ignoreMute={isEmbedByEmbedder(post.embed, post.author.did)} + ignoreQuoteDecisions> + + + )} + + - - {hasMore ? ( - - - More - - - - ) : undefined} - - + {hasMore ? ( + + + More + + + + ) : undefined} + + + + ) } } diff --git a/src/view/com/posts/Feed.tsx b/src/view/com/posts/Feed.tsx index 43f327c004..c4f859e041 100644 --- a/src/view/com/posts/Feed.tsx +++ b/src/view/com/posts/Feed.tsx @@ -1,6 +1,7 @@ import React, {memo, MutableRefObject} from 'react' import { ActivityIndicator, + AppState, Dimensions, RefreshControl, StyleProp, @@ -121,7 +122,7 @@ let Feed = ({ data?.pages.length === 1 && (feed === 'following' || feed === 'home' || - feed === `author|${myDid}|posts_no_replies`) + feed === `author|${myDid}|posts_and_author_threads`) ) { queryClient.invalidateQueries({queryKey: RQKEY(feed)}) } @@ -142,12 +143,23 @@ let Feed = ({ } }, [enabled]) React.useEffect(() => { - if (!pollInterval) { - return + let cleanup1: () => void | undefined, cleanup2: () => void | undefined + const subscription = AppState.addEventListener('change', nextAppState => { + // check for new on app foreground + if (nextAppState === 'active') { + checkForNewRef.current?.() + } + }) + cleanup1 = () => subscription.remove() + if (pollInterval) { + // check for new on interval + const i = setInterval(() => checkForNewRef.current?.(), pollInterval) + cleanup2 = () => clearInterval(i) + } + return () => { + cleanup1?.() + cleanup2?.() } - // check for new on interval - const i = setInterval(() => checkForNewRef.current?.(), pollInterval) - return () => clearInterval(i) }, [pollInterval]) const feedItems = React.useMemo(() => { diff --git a/src/view/com/posts/FeedItem.tsx b/src/view/com/posts/FeedItem.tsx index df4728a548..f054a40f29 100644 --- a/src/view/com/posts/FeedItem.tsx +++ b/src/view/com/posts/FeedItem.tsx @@ -33,6 +33,7 @@ import {MAX_POST_LINES} from 'lib/constants' import {countLines} from 'lib/strings/helpers' import {useComposerControls} from '#/state/shell/composer' import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow' +import {FeedNameText} from '../util/FeedInfoText' export function FeedItem({ post, @@ -177,22 +178,20 @@ let FeedItemInner = ({ {isReasonFeedSource(reason) ? ( - + From{' '} - diff --git a/src/view/com/posts/FollowingEmptyState.tsx b/src/view/com/posts/FollowingEmptyState.tsx index 61a27e48ea..aac29603dc 100644 --- a/src/view/com/posts/FollowingEmptyState.tsx +++ b/src/view/com/posts/FollowingEmptyState.tsx @@ -89,6 +89,7 @@ const styles = StyleSheet.create({ paddingHorizontal: 30, }, inner: { + width: '100%', maxWidth: 460, }, iconContainer: { diff --git a/src/view/com/posts/FollowingEndOfFeed.tsx b/src/view/com/posts/FollowingEndOfFeed.tsx index 6630b9a833..3f1297547b 100644 --- a/src/view/com/posts/FollowingEndOfFeed.tsx +++ b/src/view/com/posts/FollowingEndOfFeed.tsx @@ -91,6 +91,7 @@ const styles = StyleSheet.create({ borderTopWidth: 1, }, inner: { + width: '100%', maxWidth: 460, }, emptyBtn: { diff --git a/src/view/com/profile/ProfileHeader.tsx b/src/view/com/profile/ProfileHeader.tsx index 6975e39646..7d52216b0a 100644 --- a/src/view/com/profile/ProfileHeader.tsx +++ b/src/view/com/profile/ProfileHeader.tsx @@ -51,7 +51,7 @@ import {sanitizeHandle} from 'lib/strings/handles' import {shareUrl} from 'lib/sharing' import {s, colors} from 'lib/styles' import {logger} from '#/logger' -import {useSession} from '#/state/session' +import {useSession, getAgent} from '#/state/session' import {Shadow} from '#/state/cache/types' import {useRequireAuth} from '#/state/session' import {LabelInfo} from '../util/moderation/LabelInfo' @@ -127,18 +127,42 @@ let ProfileHeaderLoaded = ({ const invalidHandle = isInvalidHandle(profile.handle) const {isDesktop} = useWebMediaQueries() const [showSuggestedFollows, setShowSuggestedFollows] = React.useState(false) - const descriptionRT = React.useMemo( - () => - profile.description - ? new RichTextAPI({text: profile.description}) - : undefined, - [profile], - ) const [queueFollow, queueUnfollow] = useProfileFollowMutationQueue(profile) const [queueMute, queueUnmute] = useProfileMuteMutationQueue(profile) const [queueBlock, queueUnblock] = useProfileBlockMutationQueue(profile) const queryClient = useQueryClient() + /* + * BEGIN handle bio facet resolution + */ + // should be undefined on first render to trigger a resolution + const prevProfileDescription = React.useRef() + const [descriptionRT, setDescriptionRT] = React.useState< + RichTextAPI | undefined + >( + profile.description + ? new RichTextAPI({text: profile.description}) + : undefined, + ) + React.useEffect(() => { + async function resolveRTFacets() { + // new each time + const rt = new RichTextAPI({text: profile.description || ''}) + await rt.detectFacets(getAgent()) + // replace existing RT instance + setDescriptionRT(rt) + } + + if (profile.description !== prevProfileDescription.current) { + // update prev immediately + prevProfileDescription.current = profile.description + resolveRTFacets() + } + }, [profile.description, setDescriptionRT]) + /* + * END handle bio facet resolution + */ + const invalidateProfileQuery = React.useCallback(() => { queryClient.invalidateQueries({ queryKey: profileQueryKey(profile.did), @@ -608,7 +632,7 @@ let ProfileHeaderLoaded = ({ {descriptionRT && !moderation.profile.blur ? ( - + +}) { + const pal = usePalette('default') + const {isMobile} = useWebMediaQueries() + const containerStyles = useColorSchemeStyle( + { + borderColor: pal.colors.unreadNotifBorder, + backgroundColor: pal.colors.unreadNotifBg, + }, + { + borderColor: pal.colors.unreadNotifBorder, + backgroundColor: pal.colors.unreadNotifBg, + }, + ) + const iconStyles = useColorSchemeStyle( + { + backgroundColor: colors.blue3, + }, + { + backgroundColor: colors.blue3, + }, + ) + const textStyles = useColorSchemeStyle( + {color: colors.gray7}, + {color: colors.blue1}, + ) + const record = React.useMemo( + () => + post.threadgate && + AppBskyFeedThreadgate.isRecord(post.threadgate.record) && + AppBskyFeedThreadgate.validateRecord(post.threadgate.record).success + ? post.threadgate.record + : null, + [post], + ) + if (record) { + return ( + + + + + + + {!record.allow?.length ? ( + Replies to this thread are disabled + ) : ( + + Only{' '} + {record.allow.map((rule, i) => ( + <> + + + + ))}{' '} + can reply. + + )} + + + + ) + } + return null +} + +function Rule({ + rule, + post, + lists, +}: { + rule: any + post: AppBskyFeedDefs.PostView + lists: AppBskyGraphDefs.ListViewBasic[] | undefined +}) { + const pal = usePalette('default') + if (AppBskyFeedThreadgate.isMentionRule(rule)) { + return mentioned users + } + if (AppBskyFeedThreadgate.isFollowingRule(rule)) { + return ( + + users followed by{' '} + + + ) + } + if (AppBskyFeedThreadgate.isListRule(rule)) { + const list = lists?.find(l => l.uri === rule.list) + if (list) { + const listUrip = new AtUri(list.uri) + return ( + + {' '} + members + + ) + } + } +} + +function Separator({i, length}: {i: number; length: number}) { + if (length < 2 || i === length - 1) { + return null + } + if (i === length - 2) { + return ( + <> + {length > 2 ? ',' : ''} and{' '} + + ) + } + return <>, +} diff --git a/src/view/com/util/FeedInfoText.tsx b/src/view/com/util/FeedInfoText.tsx new file mode 100644 index 0000000000..54124c739a --- /dev/null +++ b/src/view/com/util/FeedInfoText.tsx @@ -0,0 +1,54 @@ +import React from 'react' +import {StyleProp, StyleSheet, TextStyle} from 'react-native' +import {TextLinkOnWebOnly} from './Link' +import {LoadingPlaceholder} from './LoadingPlaceholder' +import {TypographyVariant} from 'lib/ThemeContext' +import {sanitizeDisplayName} from 'lib/strings/display-names' +import {useFeedSourceInfoQuery} from '#/state/queries/feed' + +export function FeedNameText({ + type = 'md', + uri, + href, + lineHeight, + numberOfLines, + style, +}: { + type?: TypographyVariant + uri: string + href: string + lineHeight?: number + numberOfLines?: number + style?: StyleProp +}) { + const {data, isError} = useFeedSourceInfoQuery({uri}) + + let inner + if (data?.displayName || isError) { + const displayName = data?.displayName || uri.split('/').pop() || '' + inner = ( + + ) + } else { + inner = ( + + ) + } + + return inner +} + +const styles = StyleSheet.create({ + loadingPlaceholder: {position: 'relative', top: 1, left: 2}, +}) diff --git a/src/view/com/util/LoadingPlaceholder.tsx b/src/view/com/util/LoadingPlaceholder.tsx index a07b333256..b7f133774a 100644 --- a/src/view/com/util/LoadingPlaceholder.tsx +++ b/src/view/com/util/LoadingPlaceholder.tsx @@ -214,7 +214,7 @@ export function FeedLoadingPlaceholder({ pal.border, style, ]}> - + {showLowerPlaceholder && ( - + { - requireAuth(() => onPressReply()) + if (!post.viewer?.replyDisabled) { + requireAuth(() => onPressReply()) + } }} accessibilityRole="button" accessibilityLabel={`Reply (${post.replyCount} ${ diff --git a/src/view/com/util/post-embeds/index.tsx b/src/view/com/util/post-embeds/index.tsx index 5c16a3b3eb..2814cad878 100644 --- a/src/view/com/util/post-embeds/index.tsx +++ b/src/view/com/util/post-embeds/index.tsx @@ -95,7 +95,9 @@ export function PostEmbeds({ // quote post // = return ( - + + + ) } diff --git a/src/view/com/util/text/RichText.tsx b/src/view/com/util/text/RichText.tsx index b414baed94..99062e8485 100644 --- a/src/view/com/util/text/RichText.tsx +++ b/src/view/com/util/text/RichText.tsx @@ -77,7 +77,7 @@ export function RichText({ type={type} text={segment.text} href={`/profile/${mention.did}`} - style={[style, lineHeightStyle, pal.link]} + style={[style, lineHeightStyle, pal.link, {pointerEvents: 'auto'}]} dataSet={WORD_WRAP} />, ) @@ -88,7 +88,7 @@ export function RichText({ type={type} text={toShortUrl(segment.text)} href={link.uri} - style={[style, lineHeightStyle, pal.link]} + style={[style, lineHeightStyle, pal.link, {pointerEvents: 'auto'}]} dataSet={WORD_WRAP} warnOnMismatchingLabel />, diff --git a/src/view/screens/LanguageSettings.tsx b/src/view/screens/LanguageSettings.tsx index eefbfb2e25..819840a461 100644 --- a/src/view/screens/LanguageSettings.tsx +++ b/src/view/screens/LanguageSettings.tsx @@ -21,6 +21,7 @@ import {useModalControls} from '#/state/modals' import {useLanguagePrefs, useLanguagePrefsApi} from '#/state/preferences' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' +import {sanitizeAppLanguageSetting} from '#/locale/helpers' type Props = NativeStackScreenProps @@ -60,7 +61,7 @@ export function LanguageSettingsScreen(_props: Props) { (value: Parameters[0]) => { if (!value) return if (langPrefs.appLanguage !== value) { - setLangPrefs.setAppLanguage(value) + setLangPrefs.setAppLanguage(sanitizeAppLanguageSetting(value)) } }, [langPrefs, setLangPrefs], @@ -103,7 +104,7 @@ export function LanguageSettingsScreen(_props: Props) { Boolean(l.code2)).map(l => ({ label: l.name, diff --git a/src/view/screens/Moderation.tsx b/src/view/screens/Moderation.tsx index 9479704662..ba6b9d96c7 100644 --- a/src/view/screens/Moderation.tsx +++ b/src/view/screens/Moderation.tsx @@ -131,7 +131,7 @@ export function ModerationScreen({}: Props) { paddingBottom: 6, }, ]}> - Logged-out users + Logged-out visibility @@ -200,7 +200,9 @@ function PwiOptOut() { style={{flexDirection: 'row', alignItems: 'center', paddingRight: 14}}> - Your profile and posts will not be visible to people visiting the - Bluesky app or website without having an account and being logged - in. + Bluesky will not show your profile and posts to logged-out users. + Other apps may not honor this request. This does not make your + account private. - Note: Bluesky is an open and public network, and enabling this will - not make your profile private or limit the ability of logged in - users to see your posts. This setting only limits the visibility of - posts on the Bluesky app and website; third-party apps that display - Bluesky content may not respect this setting, and could show your - content to logged-out users. + Note: Bluesky is an open and public network. This setting only + limits the visibility of your content on the Bluesky app and + website, and other apps may not respect this setting. Your content + may still be shown to logged-out users by other apps and websites. (null) + const checkLatestRef = React.useRef<() => void | null>() const {screen} = useAnalytics() const pal = usePalette('default') const {isDesktop} = useWebMediaQueries() @@ -63,16 +64,26 @@ export function NotificationsScreen({}: Props) { } }, [scrollToTop, queryClient, unreadApi, hasNew]) + const onFocusCheckLatest = React.useCallback(() => { + // on focus, check for latest, but only invalidate if the user + // isnt scrolled down to avoid moving content underneath them + unreadApi.checkUnread({invalidate: !isScrolledDown}) + }, [unreadApi, isScrolledDown]) + checkLatestRef.current = onFocusCheckLatest + // on-visible setup // = useFocusEffect( React.useCallback(() => { setMinimalShellMode(false) - logger.debug('NotificationsScreen: Updating feed') + logger.debug('NotificationsScreen: Focus') screen('Notifications') - return listenSoftReset(onPressLoadLatest) - }, [screen, onPressLoadLatest, setMinimalShellMode]), + checkLatestRef.current?.() + }, [screen, setMinimalShellMode]), ) + React.useEffect(() => { + return listenSoftReset(onPressLoadLatest) + }, [onPressLoadLatest]) const ListHeaderComponent = React.useCallback(() => { if (isDesktop) { diff --git a/src/view/screens/PostThread.tsx b/src/view/screens/PostThread.tsx index 4b1f517487..8e9e399f5e 100644 --- a/src/view/screens/PostThread.tsx +++ b/src/view/screens/PostThread.tsx @@ -37,6 +37,7 @@ export function PostThreadScreen({route}: Props) { const {isMobile} = useWebMediaQueries() const uri = makeRecordUri(name, 'app.bsky.feed.post', rkey) const {data: resolvedUri, error: uriError} = useResolveUriQuery(uri) + const [canReply, setCanReply] = React.useState(false) useFocusEffect( React.useCallback(() => { @@ -84,10 +85,11 @@ export function PostThreadScreen({route}: Props) { )} - {isMobile && ( + {isMobile && canReply && ( ( ( testID="postsFeed" enabled={isFocused} feed={feed} - pollInterval={30e3} scrollElRef={scrollElRef} onHasNew={setHasNew} onScroll={onScroll} diff --git a/src/view/screens/SavedFeeds.tsx b/src/view/screens/SavedFeeds.tsx index 858a58a3ce..bbac306893 100644 --- a/src/view/screens/SavedFeeds.tsx +++ b/src/view/screens/SavedFeeds.tsx @@ -26,7 +26,6 @@ import { useUnpinFeedMutation, useSetSaveFeedsMutation, } from '#/state/queries/preferences' -import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder' const HITSLOP_TOP = { top: 20, @@ -89,6 +88,7 @@ export function SavedFeeds({}: Props) { Pinned Feeds + {preferences?.feeds ? ( !currentFeeds.pinned.length ? ( - } + showMinimalPlaceholder /> { const theme = useTheme() const pal = usePalette('default') - const queryClient = useQueryClient() const setDrawerOpen = useSetDrawerOpen() const navigation = useNavigation() const {track} = useAnalytics() @@ -140,16 +136,12 @@ let DrawerContent = ({}: {}): React.ReactNode => { } else if (tabState === TabState.Inside) { navigation.dispatch(StackActions.popToTop()) } else { - if (tab === 'Notifications') { - // fetch new notifs on view - truncateAndInvalidate(queryClient, NOTIFS_RQKEY()) - } // @ts-ignore must be Home, Search, Notifications, or MyProfile navigation.navigate(`${tab}Tab`) } } }, - [track, navigation, setDrawerOpen, currentAccount, queryClient], + [track, navigation, setDrawerOpen, currentAccount], ) const onPressHome = React.useCallback(() => onPressTab('Home'), [onPressTab]) diff --git a/src/view/shell/bottom-bar/BottomBar.tsx b/src/view/shell/bottom-bar/BottomBar.tsx index 746b4d123d..7f1ba8a5f2 100644 --- a/src/view/shell/bottom-bar/BottomBar.tsx +++ b/src/view/shell/bottom-bar/BottomBar.tsx @@ -1,7 +1,6 @@ import React, {ComponentProps} from 'react' import {GestureResponderEvent, TouchableOpacity, View} from 'react-native' import Animated from 'react-native-reanimated' -import {useQueryClient} from '@tanstack/react-query' import {StackActions} from '@react-navigation/native' import {BottomTabBarProps} from '@react-navigation/bottom-tabs' import {useSafeAreaInsets} from 'react-native-safe-area-context' @@ -31,8 +30,6 @@ import {useUnreadNotifications} from '#/state/queries/notifications/unread' import {emitSoftReset} from '#/state/events' import {useSession} from '#/state/session' import {useProfileQuery} from '#/state/queries/profile' -import {RQKEY as NOTIFS_RQKEY} from '#/state/queries/notifications/feed' -import {truncateAndInvalidate} from '#/state/queries/util' type TabOptions = 'Home' | 'Search' | 'Notifications' | 'MyProfile' | 'Feeds' @@ -41,7 +38,6 @@ export function BottomBar({navigation}: BottomTabBarProps) { const {hasSession, currentAccount} = useSession() const pal = usePalette('default') const {_} = useLingui() - const queryClient = useQueryClient() const safeAreaInsets = useSafeAreaInsets() const {track} = useAnalytics() const {footerHeight} = useShellLayout() @@ -61,14 +57,10 @@ export function BottomBar({navigation}: BottomTabBarProps) { } else if (tabState === TabState.Inside) { navigation.dispatch(StackActions.popToTop()) } else { - if (tab === 'Notifications') { - // fetch new notifs on view - truncateAndInvalidate(queryClient, NOTIFS_RQKEY()) - } navigation.navigate(`${tab}Tab`) } }, - [track, navigation, queryClient], + [track, navigation], ) const onPressHome = React.useCallback(() => onPressTab('Home'), [onPressTab]) const onPressSearch = React.useCallback( diff --git a/src/view/shell/desktop/LeftNav.tsx b/src/view/shell/desktop/LeftNav.tsx index 2ed294501b..e294431f31 100644 --- a/src/view/shell/desktop/LeftNav.tsx +++ b/src/view/shell/desktop/LeftNav.tsx @@ -45,10 +45,7 @@ import {useUnreadNotifications} from '#/state/queries/notifications/unread' import {useComposerControls} from '#/state/shell/composer' import {useFetchHandle} from '#/state/queries/handle' import {emitSoftReset} from '#/state/events' -import {useQueryClient} from '@tanstack/react-query' -import {RQKEY as NOTIFS_RQKEY} from '#/state/queries/notifications/feed' import {NavSignupCard} from '#/view/shell/NavSignupCard' -import {truncateAndInvalidate} from '#/state/queries/util' function ProfileCard() { const {currentAccount} = useSession() @@ -123,7 +120,6 @@ interface NavItemProps { } function NavItem({count, href, icon, iconFilled, label}: NavItemProps) { const pal = usePalette('default') - const queryClient = useQueryClient() const {currentAccount} = useSession() const {isDesktop, isTablet} = useWebMediaQueries() const [pathName] = React.useMemo(() => router.matchPath(href), [href]) @@ -149,14 +145,10 @@ function NavItem({count, href, icon, iconFilled, label}: NavItemProps) { if (isCurrent) { emitSoftReset() } else { - if (href === '/notifications') { - // fetch new notifs on view - truncateAndInvalidate(queryClient, NOTIFS_RQKEY()) - } onPress() } }, - [onPress, isCurrent, queryClient, href], + [onPress, isCurrent], ) return ( diff --git a/yarn.lock b/yarn.lock index 4005ecc5a7..c08c37a963 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34,24 +34,10 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@atproto/api@^0.6.24": - version "0.6.24" - resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.6.24.tgz#79753f82649baa2993677645d809708dd5796e0a" - integrity sha512-y3gz0F5wYAtaZ5XYL8FqXW90sOnXHlh4Cir+hjrlSftSoNJcTVR+6dKT5m0ZTqqvFoFryTPKs6BEQy/VBCsNxg== - dependencies: - "@atproto/common-web" "^0.2.3" - "@atproto/lexicon" "^0.3.1" - "@atproto/syntax" "^0.1.5" - "@atproto/xrpc" "^0.4.1" - multiformats "^9.9.0" - tlds "^1.234.0" - typed-emitter "^2.1.0" - zod "^3.21.4" - -"@atproto/api@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.7.0.tgz#8cdc9613a3ddd390073b3e8d6ac56e9df04d833b" - integrity sha512-1iW/RctVLi74axkXRgou52GjuqnYRSHgZi48hF9aqIR4ukONX+5FU7ALjPAz8c+0KZQXFQyY28fB+FnPNGVCig== +"@atproto/api@^0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.7.2.tgz#463763ae1e4abab98838f5d04678677116e3d8f9" + integrity sha512-OpE5LQdax5tL9KBmGs1euoNb/XMFUCqaOtEBF0PileOu52vb6Ba66ruEdNy/FEKhPdJryhLyiMfiHoPSvshBFQ== dependencies: "@atproto/common-web" "^0.2.3" "@atproto/lexicon" "^0.3.1" @@ -79,12 +65,12 @@ multiformats "^9.9.0" uint8arrays "3.0.0" -"@atproto/bsky@^0.0.16": - version "0.0.16" - resolved "https://registry.yarnpkg.com/@atproto/bsky/-/bsky-0.0.16.tgz#d3a0f055746340879e3b68b4211fd6f26e10af52" - integrity sha512-FYEwXfpaDMepFkV+sJRRUp4qRZ/co4he+w9/154g3TXE2guUtmKO+b1TFN4xdJK8b2U2FGksgs52M2AK9nlUNw== +"@atproto/bsky@^0.0.19": + version "0.0.19" + resolved "https://registry.yarnpkg.com/@atproto/bsky/-/bsky-0.0.19.tgz#a6c9e777c24971fdf7f6216d5b7fe0e1b77f8382" + integrity sha512-3yAReC0e/HuksLcajUrIFia02NsUw9oAorNhKxuQbXelxer+BRy2nEevXtB4YXe6YjlmQy7w7Hd++jqLlbHhJg== dependencies: - "@atproto/api" "^0.6.24" + "@atproto/api" "^0.7.2" "@atproto/common" "^0.3.3" "@atproto/crypto" "^0.3.0" "@atproto/identity" "^0.3.2" @@ -175,18 +161,18 @@ "@noble/hashes" "^1.3.1" uint8arrays "3.0.0" -"@atproto/dev-env@^0.2.16": - version "0.2.16" - resolved "https://registry.yarnpkg.com/@atproto/dev-env/-/dev-env-0.2.16.tgz#f868b6471f05033df7424e74820b350d2d1eb820" - integrity sha512-/qapGd5okbtGfspt40z1L3PwPFuKCVhtFuy99OpJPTpcKNuskZw5uIujHJ0srcRjcnGfIcM+i3H9xJdiz+sk4A== +"@atproto/dev-env@^0.2.19": + version "0.2.19" + resolved "https://registry.yarnpkg.com/@atproto/dev-env/-/dev-env-0.2.19.tgz#35b59c311eec57ba03dea34d23a9f494383e8ce3" + integrity sha512-JT5PTz8b5xprfLqaViHUfVGaNLcttofHnweo69NPBbUs1TjmT2sVyXgaKqNuSQO5T0+Sn7EGJHazFvAfg9xDUw== dependencies: - "@atproto/api" "^0.6.24" - "@atproto/bsky" "^0.0.16" + "@atproto/api" "^0.7.2" + "@atproto/bsky" "^0.0.19" "@atproto/common-web" "^0.2.3" "@atproto/crypto" "^0.3.0" "@atproto/identity" "^0.3.2" "@atproto/lexicon" "^0.3.1" - "@atproto/pds" "^0.3.4" + "@atproto/pds" "^0.3.7" "@atproto/syntax" "^0.1.5" "@atproto/xrpc-server" "^0.4.2" "@did-plc/lib" "^0.0.1" @@ -221,12 +207,12 @@ multiformats "^9.9.0" zod "^3.21.4" -"@atproto/pds@^0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@atproto/pds/-/pds-0.3.4.tgz#23c4b00a8123cfcb7a051b256ff90b1679cc91b3" - integrity sha512-+xD9RmuwcEZGGmoncG838TcDuNwcPZC1F1gZls5U4NVA4DDcZoGAIQR3uSTMJ2MbbR2B5Z7X/upc24nIV7FgLw== +"@atproto/pds@^0.3.7": + version "0.3.7" + resolved "https://registry.yarnpkg.com/@atproto/pds/-/pds-0.3.7.tgz#957b528ab873616d2744d96673da37c93c9303b4" + integrity sha512-vgf8pKM+pT9FgMO1ap7Jh2KLpQb6/eXE3yqo/qQ79vCXRlT5buBtXoahauC3RRcJeEu4CB7bG+SzB9ZWnjw4mw== dependencies: - "@atproto/api" "^0.6.24" + "@atproto/api" "^0.7.2" "@atproto/aws" "^0.1.6" "@atproto/common" "^0.3.3" "@atproto/crypto" "^0.3.0" @@ -250,7 +236,8 @@ http-errors "^2.0.0" http-terminator "^3.2.0" ioredis "^5.3.2" - jsonwebtoken "^8.5.1" + jose "^5.0.1" + key-encoder "^2.0.3" kysely "^0.22.0" multiformats "^9.9.0" nodemailer "^6.8.0" @@ -8498,11 +8485,6 @@ buffer-alloc@^1.1.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -10102,13 +10084,6 @@ easy-stack@^1.0.1: resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.1.tgz#8afe4264626988cabb11f3c704ccd0c835411066" integrity sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w== -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -13971,6 +13946,11 @@ join-component@^1.1.0: resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5" integrity sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ== +jose@^5.0.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/jose/-/jose-5.1.3.tgz#303959d85c51b5cb14725f930270b72be56abdca" + integrity sha512-GPExOkcMsCLBTi1YetY2LmkoY559fss0+0KVa6kOfb2YFe84nAM7Nm/XzuZozah4iHgmBGrCOHL5/cy670SBRw== + js-base64@^3.7.2: version "3.7.5" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca" @@ -14210,22 +14190,6 @@ jsonpointer@^5.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" - "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1, jsx-ast-utils@^3.3.3: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" @@ -14236,23 +14200,6 @@ jsonwebtoken@^8.5.1: object.assign "^4.1.4" object.values "^1.1.6" -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - jwt-decode@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-4.0.0.tgz#2270352425fd413785b2faf11f6e755c5151bd4b" @@ -14523,46 +14470,16 @@ lodash.get@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== - lodash.isarguments@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== - lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -14578,7 +14495,7 @@ lodash.omit@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== -lodash.once@^4.0.0, lodash.once@^4.1.1: +lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==