diff --git a/__e2e__/tests/home-screen.test.ts b/__e2e__/tests/home-screen.test.ts index 7647b55c..b6cd1919 100644 --- a/__e2e__/tests/home-screen.test.ts +++ b/__e2e__/tests/home-screen.test.ts @@ -4,7 +4,7 @@ import {openApp, loginAsAlice, createServer} from '../util' describe('Home screen', () => { beforeAll(async () => { - await createServer('?users&follows&posts') + await createServer('?users&follows&posts&feeds') await openApp({permissions: {notifications: 'YES'}}) }) @@ -13,6 +13,23 @@ describe('Home screen', () => { await element(by.id('homeScreenFeedTabs-Following')).tap() }) + it('Can go to feeds page using feeds button in tab bar', async () => { + await element(by.id('homeScreenFeedTabs-Feeds ✨')).tap() + await expect(element(by.text('Discover new feeds'))).toBeVisible() + }) + + it('Feeds button disappears after pinning a feed', async () => { + await element(by.id('bottomBarProfileBtn')).tap() + await element(by.id('profilePager-selector')).swipe('left') + await element(by.id('profilePager-selector-4')).tap() + await element(by.id('feed-alice-favs')).tap() + await element(by.id('pinBtn')).tap() + await element(by.id('bottomBarHomeBtn')).tap() + await expect( + element(by.id('homeScreenFeedTabs-Feeds ✨')), + ).not.toBeVisible() + }) + it('Can like posts', async () => { const carlaPosts = by.id('feedItem-by-carla.test') await expect( @@ -65,14 +82,14 @@ describe('Home screen', () => { it('Can swipe between feeds', async () => { await element(by.id('homeScreen')).swipe('left', 'fast', 0.75) - await expect(element(by.id('whatshotFeedPage'))).toBeVisible() + await expect(element(by.id('customFeedPage'))).toBeVisible() await element(by.id('homeScreen')).swipe('right', 'fast', 0.75) await expect(element(by.id('followingFeedPage'))).toBeVisible() }) it('Can tap between feeds', async () => { - await element(by.id("homeScreenFeedTabs-What's hot")).tap() - await expect(element(by.id('whatshotFeedPage'))).toBeVisible() + await element(by.id('homeScreenFeedTabs-alice-favs')).tap() + await expect(element(by.id('customFeedPage'))).toBeVisible() await element(by.id('homeScreenFeedTabs-Following')).tap() await expect(element(by.id('followingFeedPage'))).toBeVisible() }) diff --git a/app.config.js b/app.config.js index d7a0aa21..67fbd930 100644 --- a/app.config.js +++ b/app.config.js @@ -1,12 +1,41 @@ +const pkg = require('./package.json') + module.exports = function () { - const hasSentryToken = !!process.env.SENTRY_AUTH_TOKEN + /** + * App version number. Should be incremented as part of a release cycle. + */ + const VERSION = pkg.version + + /** + * iOS build number. Must be incremented for each TestFlight version. + */ + const IOS_BUILD_NUMBER = '5' + + /** + * Android build number. Must be incremented for each release. + */ + const ANDROID_VERSION_CODE = 46 + + /** + * Uses built-in Expo env vars + * + * @see https://docs.expo.dev/build-reference/variables/#built-in-environment-variables + */ + const PLATFORM = process.env.EAS_BUILD_PLATFORM + + /** + * Additional granularity for the `dist` field + */ + const DIST_BUILD_NUMBER = + PLATFORM === 'android' ? ANDROID_VERSION_CODE : IOS_BUILD_NUMBER + return { expo: { + version: VERSION, name: 'Bluesky', slug: 'bluesky', scheme: 'bluesky', owner: 'blueskysocial', - version: '1.57.0', runtimeVersion: { policy: 'appVersion', }, @@ -19,7 +48,7 @@ module.exports = function () { backgroundColor: '#ffffff', }, ios: { - buildNumber: '4', + buildNumber: IOS_BUILD_NUMBER, supportsTablet: false, bundleIdentifier: 'xyz.blueskyweb.app', config: { @@ -43,7 +72,7 @@ module.exports = function () { backgroundColor: '#ffffff', }, android: { - versionCode: 46, + versionCode: ANDROID_VERSION_CODE, adaptiveIcon: { foregroundImage: './assets/adaptive-icon.png', backgroundColor: '#ffffff', @@ -74,7 +103,7 @@ module.exports = function () { }, plugins: [ 'expo-localization', - hasSentryToken && 'sentry-expo', + Boolean(process.env.SENTRY_AUTH_TOKEN) && 'sentry-expo', [ 'expo-build-properties', { @@ -100,11 +129,16 @@ module.exports = function () { }, hooks: { postPublish: [ + /* + * @see https://docs.expo.dev/guides/using-sentry/#app-configuration + */ { file: 'sentry-expo/upload-sourcemaps', config: { organization: 'blueskyweb', project: 'react-native', + release: VERSION, + dist: `${PLATFORM}.${VERSION}.${DIST_BUILD_NUMBER}`, }, }, ], diff --git a/eas.json b/eas.json index a66b6c07..25fee4ea 100644 --- a/eas.json +++ b/eas.json @@ -11,28 +11,19 @@ "extends": "base", "developmentClient": true, "distribution": "internal", + "channel": "development", "ios": { "simulator": true, "resourceClass": "large" - }, - "channel": "development" - }, - "development-device": { - "extends": "base", - "developmentClient": true, - "distribution": "internal", - "ios": { - "resourceClass": "large" - }, - "channel": "development" + } }, "preview": { "extends": "base", "distribution": "internal", + "channel": "preview", "ios": { "resourceClass": "large" - }, - "channel": "preview" + } }, "production": { "extends": "base", @@ -40,14 +31,6 @@ "resourceClass": "large" }, "channel": "production" - }, - "dev-android-apk": { - "extends": "base", - "developmentClient": true, - "android": { - "buildType": "apk", - "gradleCommand": ":app:assembleRelease" - } } }, "submit": { diff --git a/index.js b/index.js index 4faf36dc..4fc95bd1 100644 --- a/index.js +++ b/index.js @@ -3,10 +3,12 @@ import 'react-native-gesture-handler' // must be first import {LogBox} from 'react-native' LogBox.ignoreLogs(['Require cycle:']) // suppress require-cycle warnings, it's fine -import 'platform/polyfills' +import '#/platform/polyfills' import {registerRootComponent} from 'expo' +import {doPolyfill} from '#/lib/api/api-polyfill' +doPolyfill() -import App from './src/App' +import App from '#/App' // registerRootComponent calls AppRegistry.registerComponent('main', () => App); // It also ensures that whether you load the app in Expo Go or in a native build, diff --git a/index.web.js b/index.web.js index 4ceb656f..4dee831c 100644 --- a/index.web.js +++ b/index.web.js @@ -1,4 +1,7 @@ -import 'platform/polyfills' +import '#/platform/polyfills' import {registerRootComponent} from 'expo' -import App from './src/App' +import {doPolyfill} from '#/lib/api/api-polyfill' +import App from '#/App' + +doPolyfill() registerRootComponent(App) diff --git a/package.json b/package.json index 814464a9..6c75054b 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "perf:test:measure": "NODE_ENV=test flashlight test --bundleId xyz.blueskyweb.app --testCommand 'yarn perf:test' --duration 150000 --resultsFilePath .perf/results.json", "perf:test:results": "NODE_ENV=test flashlight report .perf/results.json", "perf:measure": "NODE_ENV=test flashlight measure", - "build:apk": "eas build -p android --profile dev-android-apk", "intl:extract": "lingui extract", "intl:compile": "lingui compile" }, diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts index 912302d0..1123c4e2 100644 --- a/src/lib/api/feed-manip.ts +++ b/src/lib/api/feed-manip.ts @@ -16,14 +16,7 @@ export type FeedTunerFn = ( export class FeedViewPostsSlice { isFlattenedReply = false - constructor(public items: FeedViewPost[] = []) {} - - get _reactKey() { - const rootItem = this.isFlattenedReply ? this.items[1] : this.items[0] - return `slice-${rootItem.post.uri}-${ - rootItem.reason?.indexedAt || rootItem.post.indexedAt - }` - } + constructor(public items: FeedViewPost[], public _reactKey: string) {} get uri() { if (this.isFlattenedReply) { @@ -118,28 +111,34 @@ export class FeedViewPostsSlice { } export class NoopFeedTuner { - reset() {} + private keyCounter = 0 + + reset() { + this.keyCounter = 0 + } tune( feed: FeedViewPost[], - _tunerFns: FeedTunerFn[] = [], _opts?: {dryRun: boolean; maintainOrder: boolean}, ): FeedViewPostsSlice[] { - return feed.map(item => new FeedViewPostsSlice([item])) + return feed.map( + item => new FeedViewPostsSlice([item], `slice-${this.keyCounter++}`), + ) } } export class FeedTuner { + private keyCounter = 0 seenUris: Set = new Set() - constructor() {} + constructor(public tunerFns: FeedTunerFn[]) {} reset() { + this.keyCounter = 0 this.seenUris.clear() } tune( feed: FeedViewPost[], - tunerFns: FeedTunerFn[] = [], {dryRun, maintainOrder}: {dryRun: boolean; maintainOrder: boolean} = { dryRun: false, maintainOrder: false, @@ -148,7 +147,9 @@ export class FeedTuner { let slices: FeedViewPostsSlice[] = [] if (maintainOrder) { - slices = feed.map(item => new FeedViewPostsSlice([item])) + slices = feed.map( + item => new FeedViewPostsSlice([item], `slice-${this.keyCounter++}`), + ) } else { // arrange the posts into thread slices for (let i = feed.length - 1; i >= 0; i--) { @@ -164,12 +165,14 @@ export class FeedTuner { continue } } - slices.unshift(new FeedViewPostsSlice([item])) + slices.unshift( + new FeedViewPostsSlice([item], `slice-${this.keyCounter++}`), + ) } } // run the custom tuners - for (const tunerFn of tunerFns) { + for (const tunerFn of this.tunerFns) { slices = tunerFn(this, slices.slice()) } diff --git a/src/lib/api/feed/author.ts b/src/lib/api/feed/author.ts index 77c16786..92df84f8 100644 --- a/src/lib/api/feed/author.ts +++ b/src/lib/api/feed/author.ts @@ -1,18 +1,15 @@ import { AppBskyFeedDefs, AppBskyFeedGetAuthorFeed as GetAuthorFeed, - BskyAgent, } from '@atproto/api' import {FeedAPI, FeedAPIResponse} from './types' +import {getAgent} from '#/state/session' export class AuthorFeedAPI implements FeedAPI { - constructor( - public agent: BskyAgent, - public params: GetAuthorFeed.QueryParams, - ) {} + constructor(public params: GetAuthorFeed.QueryParams) {} async peekLatest(): Promise { - const res = await this.agent.getAuthorFeed({ + const res = await getAgent().getAuthorFeed({ ...this.params, limit: 1, }) @@ -26,7 +23,7 @@ export class AuthorFeedAPI implements FeedAPI { cursor: string | undefined limit: number }): Promise { - const res = await this.agent.getAuthorFeed({ + const res = await getAgent().getAuthorFeed({ ...this.params, cursor, limit, diff --git a/src/lib/api/feed/custom.ts b/src/lib/api/feed/custom.ts index 0be98fb4..47ffc65e 100644 --- a/src/lib/api/feed/custom.ts +++ b/src/lib/api/feed/custom.ts @@ -1,18 +1,15 @@ import { AppBskyFeedDefs, AppBskyFeedGetFeed as GetCustomFeed, - BskyAgent, } from '@atproto/api' import {FeedAPI, FeedAPIResponse} from './types' +import {getAgent} from '#/state/session' export class CustomFeedAPI implements FeedAPI { - constructor( - public agent: BskyAgent, - public params: GetCustomFeed.QueryParams, - ) {} + constructor(public params: GetCustomFeed.QueryParams) {} async peekLatest(): Promise { - const res = await this.agent.app.bsky.feed.getFeed({ + const res = await getAgent().app.bsky.feed.getFeed({ ...this.params, limit: 1, }) @@ -26,7 +23,7 @@ export class CustomFeedAPI implements FeedAPI { cursor: string | undefined limit: number }): Promise { - const res = await this.agent.app.bsky.feed.getFeed({ + const res = await getAgent().app.bsky.feed.getFeed({ ...this.params, cursor, limit, diff --git a/src/lib/api/feed/following.ts b/src/lib/api/feed/following.ts index 13f06c7a..24389b5e 100644 --- a/src/lib/api/feed/following.ts +++ b/src/lib/api/feed/following.ts @@ -1,11 +1,12 @@ -import {AppBskyFeedDefs, BskyAgent} from '@atproto/api' +import {AppBskyFeedDefs} from '@atproto/api' import {FeedAPI, FeedAPIResponse} from './types' +import {getAgent} from '#/state/session' export class FollowingFeedAPI implements FeedAPI { - constructor(public agent: BskyAgent) {} + constructor() {} async peekLatest(): Promise { - const res = await this.agent.getTimeline({ + const res = await getAgent().getTimeline({ limit: 1, }) return res.data.feed[0] @@ -18,7 +19,7 @@ export class FollowingFeedAPI implements FeedAPI { cursor: string | undefined limit: number }): Promise { - const res = await this.agent.getTimeline({ + const res = await getAgent().getTimeline({ cursor, limit, }) diff --git a/src/lib/api/feed/likes.ts b/src/lib/api/feed/likes.ts index 434ed771..2b0afdf1 100644 --- a/src/lib/api/feed/likes.ts +++ b/src/lib/api/feed/likes.ts @@ -1,18 +1,15 @@ import { AppBskyFeedDefs, AppBskyFeedGetActorLikes as GetActorLikes, - BskyAgent, } from '@atproto/api' import {FeedAPI, FeedAPIResponse} from './types' +import {getAgent} from '#/state/session' export class LikesFeedAPI implements FeedAPI { - constructor( - public agent: BskyAgent, - public params: GetActorLikes.QueryParams, - ) {} + constructor(public params: GetActorLikes.QueryParams) {} async peekLatest(): Promise { - const res = await this.agent.getActorLikes({ + const res = await getAgent().getActorLikes({ ...this.params, limit: 1, }) @@ -26,7 +23,7 @@ export class LikesFeedAPI implements FeedAPI { cursor: string | undefined limit: number }): Promise { - const res = await this.agent.getActorLikes({ + const res = await getAgent().getActorLikes({ ...this.params, cursor, limit, diff --git a/src/lib/api/feed/list.ts b/src/lib/api/feed/list.ts index 6cb0730e..19f2ff17 100644 --- a/src/lib/api/feed/list.ts +++ b/src/lib/api/feed/list.ts @@ -1,18 +1,15 @@ import { AppBskyFeedDefs, AppBskyFeedGetListFeed as GetListFeed, - BskyAgent, } from '@atproto/api' import {FeedAPI, FeedAPIResponse} from './types' +import {getAgent} from '#/state/session' export class ListFeedAPI implements FeedAPI { - constructor( - public agent: BskyAgent, - public params: GetListFeed.QueryParams, - ) {} + constructor(public params: GetListFeed.QueryParams) {} async peekLatest(): Promise { - const res = await this.agent.app.bsky.feed.getListFeed({ + const res = await getAgent().app.bsky.feed.getListFeed({ ...this.params, limit: 1, }) @@ -26,7 +23,7 @@ export class ListFeedAPI implements FeedAPI { cursor: string | undefined limit: number }): Promise { - const res = await this.agent.app.bsky.feed.getListFeed({ + const res = await getAgent().app.bsky.feed.getListFeed({ ...this.params, cursor, limit, diff --git a/src/lib/api/feed/merge.ts b/src/lib/api/feed/merge.ts index 7a0f0288..11e963f0 100644 --- a/src/lib/api/feed/merge.ts +++ b/src/lib/api/feed/merge.ts @@ -1,4 +1,4 @@ -import {AppBskyFeedDefs, AppBskyFeedGetTimeline, BskyAgent} from '@atproto/api' +import {AppBskyFeedDefs, AppBskyFeedGetTimeline} from '@atproto/api' import shuffle from 'lodash.shuffle' import {timeout} from 'lib/async/timeout' import {bundleAsync} from 'lib/async/bundle' @@ -7,6 +7,7 @@ import {FeedTuner} from '../feed-manip' import {FeedAPI, FeedAPIResponse, ReasonFeedSource} from './types' import {FeedParams} from '#/state/queries/post-feed' import {FeedTunerFn} from '../feed-manip' +import {getAgent} from '#/state/session' const REQUEST_WAIT_MS = 500 // 500ms const POST_AGE_CUTOFF = 60e3 * 60 * 24 // 24hours @@ -18,16 +19,12 @@ export class MergeFeedAPI implements FeedAPI { itemCursor = 0 sampleCursor = 0 - constructor( - public agent: BskyAgent, - public params: FeedParams, - public feedTuners: FeedTunerFn[], - ) { - this.following = new MergeFeedSource_Following(this.agent, this.feedTuners) + constructor(public params: FeedParams, public feedTuners: FeedTunerFn[]) { + this.following = new MergeFeedSource_Following(this.feedTuners) } reset() { - this.following = new MergeFeedSource_Following(this.agent, this.feedTuners) + this.following = new MergeFeedSource_Following(this.feedTuners) this.customFeeds = [] // just empty the array, they will be captured in _fetchNext() this.feedCursor = 0 this.itemCursor = 0 @@ -35,8 +32,7 @@ export class MergeFeedAPI implements FeedAPI { if (this.params.mergeFeedEnabled && this.params.mergeFeedSources) { this.customFeeds = shuffle( this.params.mergeFeedSources.map( - feedUri => - new MergeFeedSource_Custom(this.agent, feedUri, this.feedTuners), + feedUri => new MergeFeedSource_Custom(feedUri, this.feedTuners), ), ) } else { @@ -45,7 +41,7 @@ export class MergeFeedAPI implements FeedAPI { } async peekLatest(): Promise { - const res = await this.agent.getTimeline({ + const res = await getAgent().getTimeline({ limit: 1, }) return res.data.feed[0] @@ -137,7 +133,7 @@ class MergeFeedSource { queue: AppBskyFeedDefs.FeedViewPost[] = [] hasMore = true - constructor(public agent: BskyAgent, public feedTuners: FeedTunerFn[]) {} + constructor(public feedTuners: FeedTunerFn[]) {} get numReady() { return this.queue.length @@ -184,7 +180,7 @@ class MergeFeedSource { } class MergeFeedSource_Following extends MergeFeedSource { - tuner = new FeedTuner() + tuner = new FeedTuner(this.feedTuners) reset() { super.reset() @@ -199,9 +195,9 @@ class MergeFeedSource_Following extends MergeFeedSource { cursor: string | undefined, limit: number, ): Promise { - const res = await this.agent.getTimeline({cursor, limit}) + const res = await getAgent().getTimeline({cursor, limit}) // run the tuner pre-emptively to ensure better mixing - const slices = this.tuner.tune(res.data.feed, this.feedTuners, { + const slices = this.tuner.tune(res.data.feed, { dryRun: false, maintainOrder: true, }) @@ -213,20 +209,16 @@ class MergeFeedSource_Following extends MergeFeedSource { class MergeFeedSource_Custom extends MergeFeedSource { minDate: Date - constructor( - public agent: BskyAgent, - public feedUri: string, - public feedTuners: FeedTunerFn[], - ) { - super(agent, feedTuners) + constructor(public feedUri: string, public feedTuners: FeedTunerFn[]) { + super(feedTuners) this.sourceInfo = { $type: 'reasonFeedSource', displayName: feedUri.split('/').pop() || '', uri: feedUriToHref(feedUri), } this.minDate = new Date(Date.now() - POST_AGE_CUTOFF) - this.agent.app.bsky.feed - .getFeedGenerator({ + getAgent() + .app.bsky.feed.getFeedGenerator({ feed: feedUri, }) .then( @@ -244,7 +236,7 @@ class MergeFeedSource_Custom extends MergeFeedSource { limit: number, ): Promise { try { - const res = await this.agent.app.bsky.feed.getFeed({ + const res = await getAgent().app.bsky.feed.getFeed({ cursor, limit, feed: this.feedUri, diff --git a/src/lib/constants.ts b/src/lib/constants.ts index f8f65130..aa5983be 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -116,8 +116,8 @@ export async function DEFAULT_FEEDS( } else { // production return { - pinned: [PROD_DEFAULT_FEED('whats-hot')], - saved: [PROD_DEFAULT_FEED('whats-hot')], + pinned: [], + saved: [], } } } diff --git a/src/lib/hooks/useAccountSwitcher.ts b/src/lib/hooks/useAccountSwitcher.ts index 82f4565e..8a1dea5f 100644 --- a/src/lib/hooks/useAccountSwitcher.ts +++ b/src/lib/hooks/useAccountSwitcher.ts @@ -7,22 +7,35 @@ import {useAnalytics} from '#/lib/analytics/analytics' import {useSessionApi, SessionAccount} from '#/state/session' import * as Toast from '#/view/com/util/Toast' import {useCloseAllActiveElements} from '#/state/util' +import {useLoggedOutViewControls} from '#/state/shell/logged-out' export function useAccountSwitcher() { const {track} = useAnalytics() const {selectAccount, clearCurrentAccount} = useSessionApi() const closeAllActiveElements = useCloseAllActiveElements() const navigation = useNavigation() + const {setShowLoggedOut} = useLoggedOutViewControls() const onPressSwitchAccount = useCallback( - async (acct: SessionAccount) => { + async (account: SessionAccount) => { track('Settings:SwitchAccountButtonClicked') try { - closeAllActiveElements() - navigation.navigate(isWeb ? 'Home' : 'HomeTab') - await selectAccount(acct) - Toast.show(`Signed in as ${acct.handle}`) + if (account.accessJwt) { + closeAllActiveElements() + navigation.navigate(isWeb ? 'Home' : 'HomeTab') + await selectAccount(account) + setTimeout(() => { + Toast.show(`Signed in as @${account.handle}`) + }, 100) + } else { + closeAllActiveElements() + setShowLoggedOut(true) + Toast.show( + `Please sign in as @${account.handle}`, + 'circle-exclamation', + ) + } } catch (e) { Toast.show('Sorry! We need you to enter your password.') clearCurrentAccount() // back user out to login @@ -34,6 +47,7 @@ export function useAccountSwitcher() { selectAccount, closeAllActiveElements, navigation, + setShowLoggedOut, ], ) diff --git a/src/lib/notifications/notifications.ts b/src/lib/notifications/notifications.ts index 2320e1c7..9c499be0 100644 --- a/src/lib/notifications/notifications.ts +++ b/src/lib/notifications/notifications.ts @@ -83,7 +83,7 @@ export function init(queryClient: QueryClient) { ) if (event.request.trigger.type === 'push') { // refresh notifications in the background - queryClient.invalidateQueries({queryKey: RQKEY_NOTIFS()}) + queryClient.resetQueries({queryKey: RQKEY_NOTIFS()}) // handle payload-based deeplinks let payload if (isIOS) { @@ -121,7 +121,7 @@ export function init(queryClient: QueryClient) { logger.DebugContext.notifications, ) track('Notificatons:OpenApp') - queryClient.invalidateQueries({queryKey: RQKEY_NOTIFS()}) + queryClient.resetQueries({queryKey: RQKEY_NOTIFS()}) resetToTab('NotificationsTab') // open notifications tab } }, diff --git a/src/lib/react-query.ts b/src/lib/react-query.ts index 6b425d3b..6ec620f7 100644 --- a/src/lib/react-query.ts +++ b/src/lib/react-query.ts @@ -8,6 +8,15 @@ export const queryClient = new QueryClient({ // so we NEVER want to enable this // -prf refetchOnWindowFocus: false, + // Structural sharing between responses makes it impossible to rely on + // "first seen" timestamps on objects to determine if they're fresh. + // Disable this optimization so that we can rely on "first seen" timestamps. + structuralSharing: false, + // We don't want to retry queries by default, because in most cases we + // want to fail early and show a response to the user. There are + // exceptions, and those can be made on a per-query basis. For others, we + // should give users controls to retry. + retry: false, }, }, }) diff --git a/src/lib/sentry.ts b/src/lib/sentry.ts index b080bcc5..63a21a43 100644 --- a/src/lib/sentry.ts +++ b/src/lib/sentry.ts @@ -1,8 +1,46 @@ +/** + * Importing these separately from `platform/detection` and `lib/app-info` to + * avoid future conflicts and/or circular deps + */ + +import {Platform} from 'react-native' +import app from 'react-native-version-number' +import * as info from 'expo-updates' import {init} from 'sentry-expo' +/** + * Matches the build profile `channel` props in `eas.json` + */ +const buildChannel = (info.channel || 'development') as + | 'development' + | 'preview' + | 'production' + +/** + * Examples: + * - `dev` + * - `1.57.0` + */ +const release = app.appVersion ?? 'dev' + +/** + * Examples: + * - `web.dev` + * - `ios.dev` + * - `android.dev` + * - `web.1.57.0` + * - `ios.1.57.0.3` + * - `android.1.57.0.46` + */ +const dist = `${Platform.OS}.${release}${ + app.buildVersion ? `.${app.buildVersion}` : '' +}` + init({ dsn: 'https://05bc3789bf994b81bd7ce20c86ccd3ae@o4505071687041024.ingest.sentry.io/4505071690514432', - enableInExpoDevelopment: false, // if true, Sentry will try to send events/errors in development mode. debug: false, // If `true`, Sentry will try to print out useful debugging information if something goes wrong with sending the event. Set it to `false` in production - environment: __DEV__ ? 'development' : 'production', // Set the environment + enableInExpoDevelopment: true, + environment: buildChannel, + dist, + release, }) diff --git a/src/locale/locales/cs/messages.js b/src/locale/locales/cs/messages.js index 3b56d1f1..93651032 100644 --- a/src/locale/locales/cs/messages.js +++ b/src/locale/locales/cs/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"EtUMsZ\":\". This warning is only available for posts with media attached.\",\"ebOBhv\":[[\"0\",\"plural\",{\"one\":[\"#\",\" invite code available\"],\"other\":[\"#\",\" invite codes available\"]}]],\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" List\"],\"zgN03j\":[[\"invitesAvailable\",\"plural\",{\"one\":[\"Invite codes: \",\"#\",\" available\"],\"other\":[\"Invite codes: \",\"#\",\" available\"]}]],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>Choose your<1>Recommended<2>Feeds\",\"F657la\":\"<0>Follow some<1>Recommended<2>Users\",\"6RmyWt\":\"<0>Here is your app password. Use this to sign into the other app along with your handle.\",\"XCTqGE\":\"A new version of the app is available. Please update to continue using the app.\",\"AnNF5e\":\"Accessibility\",\"AeXO77\":\"Account\",\"4WY4MD\":\"Account options\",\"m16xKo\":\"Add\",\"fBBX+K\":\"Add a content warning\",\"JU3hs2\":\"Add a user to this list\",\"MPPZ54\":\"Add account\",\"LkA8jz\":\"Add alt text\",\"Z8idyM\":\"Add details\",\"AoXl11\":\"Add details to report\",\"iE6B/9\":\"Add link card\",\"EXHdP1\":\"Add link card:\",\"x6laaL\":\"Add the following DNS record to your domain:\",\"UmzMP4\":\"Add to Lists\",\"hCrQ0L\":\"Add to my feeds\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"Adjust the number of likes a reply must have to be shown in your feed.\",\"qLa52r\":\"Adult Content\",\"sxkWRg\":\"Advanced\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"Alt text\",\"0QlT7/\":\"Alt text describes images for blind and low-vision users, and helps give context to everyone.\",\"woXbjq\":[\"An email has been sent to \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"Fon2dK\":[\"An email has been sent to your previous address, \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"HZFm5R\":\"and\",\"fdjKGe\":\"App Language\",\"SMmUnj\":\"App passwords\",\"8q4WlH\":\"App Passwords\",\"aAIQg2\":\"Appearance\",\"SSDZ+T\":[\"Are you sure you want to delete the app password \\\"\",[\"name\"],\"\\\"?\"],\"0BIeIs\":\"Are you sure you'd like to discard this draft?\",\"6foA8n\":\"Are you sure?\",\"/mSd6b\":\"Are you sure? This cannot be undone.\",\"EbvWd3\":\"Artistic or non-erotic nudity.\",\"iH8pgl\":\"Back\",\"ehOkF+\":\"Basics\",\"+gCI2a\":\"Birthday\",\"pieVBA\":\"Birthday:\",\"m1dqxu\":\"Block Account\",\"ffIfdM\":\"Block accounts\",\"fdYcMy\":\"Block these accounts?\",\"KWykPE\":\"Blocked accounts\",\"JuqQpF\":\"Blocked Accounts\",\"HG4qt4\":\"Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"8LNSUt\":\"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.\",\"HFCE4A\":\"Blocked post.\",\"zl+QbX\":\"Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"C50OGr\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"Camera\",\"JGGrPC\":\"Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long.\",\"dEgA5A\":\"Cancel\",\"aMH9rr\":\"Cancel account deletion\",\"kc3E4R\":\"Cancel add image alt text\",\"wg4LHQ\":\"Cancel change handle\",\"hFL1Li\":\"Cancel image crop\",\"tijH8t\":\"Cancel profile editing\",\"Qe4C/d\":\"Cancel quote post\",\"5TviPn\":\"Cancel search\",\"nss3UV\":\"Cancel waitlist signup\",\"o+XJ9D\":\"Change\",\"pQco5R\":\"Change handle\",\"Q5e1U/\":\"Change Handle\",\"a3NAfL\":\"Change my email\",\"4vatyk\":\"Change Your Email\",\"Yn3C90\":\"Check out some recommended feeds. Tap + to add them to your list of pinned feeds.\",\"ioZXIH\":\"Check out some recommended users. Follow them to see similar users.\",\"/+X+/K\":\"Check your inbox for an email with the confirmation code to enter below:\",\"Rt502e\":\"Choose Service\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"BwcLKv\":\"Choose your\",\"Wk8hkn\":\"Choose your password\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"Clear search query\",\"flH7u/\":\"Close alert\",\"hYmnbk\":\"Close bottom drawer\",\"47L1V1\":\"Close image\",\"l49ujN\":\"Close image viewer\",\"UryHFO\":\"Close navigation footer\",\"KHzDTk\":\"Community Guidelines\",\"o8UUti\":\"Compose reply\",\"7VpPHA\":\"Confirm\",\"q8upsf\":\"Confirm Change\",\"8pNKIr\":\"Confirm content language settings\",\"tGg8Kt\":\"Confirm delete account\",\"ioZOzk\":\"Confirmation code\",\"J28zul\":\"Connecting...\",\"l879p1\":\"Content filtering\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"cogwXi\":\"Content Warning\",\"FG7AQv\":\"Content warnings\",\"xGVfLh\":\"Continue\",\"6V3Ea3\":\"Copied\",\"he3ygx\":\"Copy\",\"iQgJaz\":\"Copy post text\",\"u40k/o\":\"Copyright Policy\",\"7wWvgo\":\"Could not load feed\",\"8NNr/O\":\"Could not load list\",\"mpt9T+\":\"Create a new account\",\"IS0nrP\":\"Create Account\",\"6HbhpU\":\"Create new account\",\"MXSt4t\":[\"Created \",[\"0\"]],\"GAD3Dx\":\"Custom domain\",\"ZQKLI1\":\"Danger Zone\",\"pvnfJD\":\"Dark\",\"ZDGm40\":\"Delete account\",\"vzX5FB\":\"Delete Account\",\"gUEtxf\":\"Delete app password\",\"84uE/A\":\"Delete List\",\"ktknoE\":\"Delete my account\",\"szz0+N\":\"Delete my account…\",\"04G5Az\":\"Delete post\",\"FbPNuJ\":\"Delete this post?\",\"u+1OHY\":\"Deleted post.\",\"Nu4oKW\":\"Description\",\"dacKHE\":\"Dev Server\",\"2ygkE8\":\"Developer Tools\",\"bzSI52\":\"Discard\",\"BryYJR\":\"Discard draft\",\"pbLwal\":\"Discover new feeds\",\"pfa8F0\":\"Display name\",\"0gS7M5\":\"Display Name\",\"iZ5pMB\":\"Domain verified!\",\"DPfwMq\":\"Done\",\"zT97vP\":[\"Done\",[\"extraText\"]],\"4uwlSD\":\"Each code works once. You'll receive more invite codes periodically.\",\"XQFMOm\":\"Edit image\",\"S7M0uU\":\"Edit list details\",\"cLmurE\":\"Edit My Feeds\",\"bRZ5XW\":\"Edit my profile\",\"9OpVZg\":\"Edit profile\",\"QJQd1J\":\"Edit Profile\",\"Jn7kox\":\"Edit Saved Feeds\",\"O3oNi5\":\"Email\",\"ATGYL1\":\"Email address\",\"pJJ0Vp\":\"Email Updated\",\"9Qs99X\":\"Email:\",\"96mted\":\"Enable this setting to only see replies between people you follow.\",\"YbIxza\":\"Enter the address of your provider:\",\"BfIgP6\":\"Enter the domain you want to use\",\"cHrOqs\":\"Enter the email you used to create your account. We'll send you a \\\"reset code\\\" so you can set a new password.\",\"xRPn3U\":\"Enter your email address\",\"+inPGm\":\"Enter your new email address below.\",\"T0KLp4\":\"Enter your username and password\",\"4BITzH\":\"Error:\",\"0PkE20\":\"Expand alt text\",\"/5K/KL\":\"Failed to load recommended feeds\",\"4yCy8i\":\"Feed offline\",\"N0CqyO\":\"Feed Preferences\",\"YirHq7\":\"Feedback\",\"2DoBvq\":\"Feeds\",\"I3iUBQ\":\"Feeds are created by users to curate content. Choose some feeds that you find interesting.\",\"2+6lmO\":\"Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information.\",\"Qzj1WT\":\"Finding similar accounts...\",\"QKSrQV\":\"Fine-tune the content you see on your home screen.\",\"r+KeyR\":\"Fine-tune the discussion threads.\",\"MKEPCY\":\"Follow\",\"AD4dxh\":\"Follow some\",\"Wezu5M\":\"Follow some users to get started. We can recommend you more users based on who you find interesting.\",\"YY2BTA\":\"Followed users only\",\"x5LEuB\":\"Followers\",\"NIjL2Y\":\"following\",\"y6sq5j\":\"Following\",\"p3UO/y\":\"Follows you\",\"5RhDkD\":\"For security reasons, we'll need to send a confirmation code to your email address.\",\"NJPhAO\":\"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.\",\"5bDfuq\":\"Forgot\",\"hEPLrs\":\"Forgot password\",\"dn8X5t\":\"Forgot Password\",\"U+kFad\":\"Gallery\",\"c3b0B0\":\"Get Started\",\"CKyk7Q\":\"Go back\",\"sr0UJD\":\"Go Back\",\"Rtp0y7\":\"Go to next\",\"Nf7oXL\":\"Handle\",\"c3XJ18\":\"Help\",\"uX/4+/\":\"Here is your app password.\",\"vLyv1R\":\"Hide\",\"qdOx2q\":\"Hide user list\",\"i0qMbr\":\"Home\",\"sXZ8IU\":\"Home Feed Preferences\",\"yt7fhu\":\"Hosting provider\",\"s2xA6t\":\"Hosting provider address\",\"o+axy6\":\"I have a code\",\"wey2os\":\"I have my own domain\",\"WlEcKr\":\"If none are selected, suitable for all ages.\",\"VCk0rR\":\"Image alt text\",\"STGpNQ\":\"Image options\",\"6o7+En\":\"In Your Network\",\"dSKHAa\":\"Invalid username or password\",\"MFKlMB\":\"Invite\",\"F5MZVk\":\"Invite a Friend\",\"6KlkHI\":\"Invite code\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"Join the waitlist\",\"6iVTdm\":\"Join the waitlist.\",\"SNzppu\":\"Join Waitlist\",\"Dcq5kL\":\"Language selection\",\"pVhZHk\":\"Language Settings\",\"GAmD3h\":\"Languages\",\"NgeSlx\":\"Learn More\",\"rj0Lke\":\"Learn more about this warning\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"QfDITI\":\"Leaving Bluesky\",\"Esfg1M\":\"Let's get your password reset!\",\"exYcTF\":\"Library\",\"1njn7W\":\"Light\",\"BvSY1i\":\"Like this feed\",\"8/ALSr\":\"Liked by\",\"FuZWua\":\"List Avatar\",\"8mjA4F\":\"List Name\",\"h16FyT\":\"Lists\",\"ujW4FW\":\"Load more posts\",\"7EHsGr\":\"Load new notifications\",\"VkLESX\":\"Load new posts\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"Local dev server\",\"cR9UpQ\":\"Login to account that is not listed\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"Make sure this is where you intend to go!\",\"zucql+\":\"Menu\",\"DzmsLV\":\"Moderation\",\"NTIbv4\":\"Moderation lists\",\"FIJUJb\":\"More feeds\",\"3Siwmw\":\"More options\",\"Y17r45\":\"More post options\",\"RA1KUZ\":\"Mute Account\",\"du0opt\":\"Mute accounts\",\"izOxJM\":\"Mute these accounts?\",\"jq7SjD\":\"Mute thread\",\"s22grX\":\"Muted accounts\",\"qUa+lV\":\"Muted Accounts\",\"gA0D9A\":\"Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.\",\"1QJzM7\":\"Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.\",\"Mysqyf\":\"My Birthday\",\"6MBNS/\":\"My Feeds\",\"hKtWk2\":\"My Profile\",\"Ha6iBv\":\"My Saved Feeds\",\"6YtxFj\":\"Name\",\"8yolS6\":\"Never lose access to your followers and data.\",\"isRobC\":\"New\",\"2B7HLH\":\"New post\",\"FGrimz\":\"New Post\",\"hXzOVo\":\"Next\",\"EatZYJ\":\"Next image\",\"1UzENP\":\"No\",\"flmDTf\":\"No description\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"No results found for \\\"\",[\"query\"],\"\\\"\"],\"kA9DpB\":[\"No results found for \",[\"0\"]],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"Not Applicable\",\"iyUCYw\":\"Not Applicable.\",\"iDNBZe\":\"Notifications\",\"5GGAqz\":\"Oh no!\",\"UaXeX3\":\"Okay\",\"Cqo2D+\":\"One or more images is missing alt text.\",\"M/Q2aG\":\"Open navigation\",\"M5PuNq\":\"Opens configurable language settings\",\"S67TOE\":\"Opens list of invite codes\",\"eSqpax\":\"Opens modal for using custom domain\",\"vYwHHI\":\"Opens moderation settings\",\"0tHyB7\":\"Opens screen with all saved feeds\",\"nmRoY/\":\"Opens the app password settings page\",\"6e9Apv\":\"Opens the home feed preferences\",\"O87Dr/\":\"Opens the storybook page\",\"G+PVmg\":\"Opens the system log page\",\"Jqb7sy\":\"Opens the threads preferences\",\"b22AVl\":\"Other account\",\"n+HLOP\":\"Other service\",\"1PKxQ7\":\"Other...\",\"8F1i42\":\"Page not found\",\"8ZsakT\":\"Password\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"Password updated!\",\"VeZE5Q\":\"Pictures meant for adults.\",\"zgoxy5\":\"Pinned Feeds\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed.\",\"9qpQ5O\":\"Please enter a unique name for this App Password or use our randomly generated one.\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"Please enter your password as well:\",\"y28hnO\":\"Post\",\"h5RcXU\":\"Post hidden\",\"r5zLS0\":\"Post language\",\"AzCucI\":\"Post Languages\",\"tJFPmV\":\"Post not found\",\"0+DQbr\":\"Potentially Misleading Link\",\"MHk+7g\":\"Previous image\",\"HeBcM5\":\"Primary Language\",\"x8iR7V\":\"Prioritize Your Follows\",\"rjGI/Q\":\"Privacy\",\"LcET2C\":\"Privacy Policy\",\"k1ifdL\":\"Processing...\",\"vERlcd\":\"Profile\",\"MrgqOW\":\"Protect your account by verifying your email.\",\"p1UmBX\":\"Public, shareable lists which can drive feeds.\",\"8HFFRQ\":\"Quote post\",\"+KrAHa\":\"Quote Post\",\"WlWsdE\":\"Ratios\",\"WEYdDv\":\"Recommended\",\"QNzcT3\":\"Recommended Feeds\",\"41UoJb\":\"Recommended Users\",\"t/YqKh\":\"Remove\",\"p/cRzf\":[\"Remove \",[\"0\"],\" from my feeds?\"],\"1O32oy\":\"Remove account\",\"W44VX5\":\"Remove feed\",\"Yy3FzB\":\"Remove from my feeds\",\"5ywtDz\":\"Remove image\",\"Dw/XUh\":\"Remove image preview\",\"TbDEfs\":\"Remove this feed from your saved feeds?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"Reply Filters\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"bDHSjj\":\"Report Account\",\"NKmI9f\":\"Report feed\",\"6iwm2r\":\"Report List\",\"6IcSvC\":\"Report post\",\"mkude1\":\"Repost\",\"JOV5dR\":\"Repost or quote post\",\"0zb9FX\":\"Reposted by\",\"bqG37Z\":\"Request Change\",\"2d9VrZ\":\"Require alt text before posting\",\"8XIT+P\":\"Required for this provider\",\"vJgYMA\":\"Reset code\",\"xEL92I\":\"Reset onboarding state\",\"RfwZxd\":\"Reset password\",\"bee/Fw\":\"Reset preferences state\",\"wToeoz\":\"Resets the onboarding state\",\"nIU7qI\":\"Resets the preferences state\",\"6gRgw8\":\"Retry\",\"hAbYQa\":\"Retry change handle\",\"tfDRzk\":\"Save\",\"KV2YQQ\":\"Save alt text\",\"y3aU20\":\"Save changes\",\"IUwGEM\":\"Save Changes\",\"Xs07Tg\":\"Save handle change\",\"BckA7m\":\"Save image crop\",\"+K+JDj\":\"Saved Feeds\",\"A1taO8\":\"Search\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"Security Step Required\",\"cNzyJW\":\"See what's next\",\"L5sM7N\":\"Select Bluesky Social\",\"o3dwub\":\"Select from an existing account\",\"GGw2AK\":\"Select service\",\"vECNLO\":\"Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown.\",\"m5aabx\":\"Select your app language for the default text to display in the app\",\"TiiOza\":\"Select your preferred language for translations in your feed.\",\"vp9yIB\":\"Send Confirmation Email\",\"65dxv8\":\"Send email\",\"i/TzEU\":\"Send Email\",\"RoafuO\":\"Send feedback\",\"4cijjm\":\"Send Report\",\"V/e7nf\":\"Set new password\",\"gwsie4\":\"Set this setting to \\\"No\\\" to hide all quote posts from your feed. Reposts will still be visible.\",\"IZjC3J\":\"Set this setting to \\\"No\\\" to hide all replies from your feed.\",\"KIgU3l\":\"Set this setting to \\\"No\\\" to hide all reposts from your feed.\",\"zaAyrz\":\"Set this setting to \\\"Yes\\\" to show replies in a threaded view. This is an experimental feature.\",\"fQV2eE\":\"Set this setting to \\\"Yes\\\" to show samples of your saved feeds in your following feed. This is an experimental feature.\",\"Tz0i8g\":\"Settings\",\"HfWHhJ\":\"Sexual activity or erotic nudity.\",\"Z8lGw6\":\"Share\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"Share link\",\"8vETh9\":\"Show\",\"aWAdCb\":\"Show anyway\",\"NijgXr\":\"Show Posts from My Feeds\",\"T3Mt8m\":\"Show Quote Posts\",\"BlW8X/\":\"Show Replies\",\"X4GwDb\":\"Show replies by people you follow before all other replies.\",\"GiogzH\":\"Show Reposts\",\"fhY/fL\":\"Show users\",\"5lWFkC\":\"Sign in\",\"n1ekoW\":\"Sign In\",\"N9o7n5\":[\"Sign in as \",[\"0\"]],\"FT1MVS\":\"Sign in as...\",\"+UpfFC\":\"Sign into\",\"fcWrnU\":\"Sign out\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"Signed in as\",\"6Uau97\":\"Skip\",\"0o5BFH\":\"Sort Replies\",\"GH1Rgk\":\"Sort replies to the same post by:\",\"1DA6ap\":\"Square\",\"aKEHLj\":\"Staging\",\"tgEXwM\":\"Status page\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"Subscribe\",\"5z3ICN\":\"Subscribe to this list\",\"TVFyMD\":\"Suggested Follows\",\"XYLcNv\":\"Support\",\"VjWeLI\":\"Switch Account\",\"D+NlUC\":\"System\",\"fP8jTZ\":\"System log\",\"HF6Iah\":\"Tall\",\"4Y5H+g\":\"Terms\",\"xowcRf\":\"Terms of Service\",\"p8Iz39\":\"Text input field\",\"GlPXQJ\":\"The account will be able to interact with you after unblocking.\",\"o4M2MP\":\"The Community Guidelines have been moved to <0/>\",\"U42lKc\":\"The Copyright Policy has been moved to <0/>\",\"G4EksE\":\"The post may have been deleted.\",\"WNR9db\":\"The Privacy Policy has been moved to <0/>\",\"LbEbIk\":[\"The support form has been moved. If you need help, please<0/> or visit \",[\"HELP_DESK_URL\"],\" to get in touch with us.\"],\"FGbRSr\":\"The Terms of Service have been moved to\",\"yUqcy2\":\"There was an unexpected issue in the application. Please let us know if this happened to you!\",\"KRYn8w\":[\"This \",[\"screenDescription\"],\" has been flagged:\"],\"lm845B\":\"This information is not shared with other users.\",\"5Pvw/O\":\"This is important in case you ever need to change your email or reset your password.\",\"sQQfZ9\":\"This is the service that keeps you online.\",\"CvX8qs\":\"This link is taking you to the following website:\",\"WKrUVy\":\"This post has been deleted.\",\"qpCA5s\":\"This warning is only available for posts with media attached.\",\"u9ThjD\":\"Thread Preferences\",\"zmXsk5\":\"Threaded Mode\",\"1x30Qt\":\"Toggle dropdown\",\"KFXQEt\":\"Transformations\",\"pi8x/S\":\"Translate\",\"KDw4GX\":\"Try again\",\"nc4Wfd\":\"Unable to contact your service. Please check your Internet connection.\",\"tuS5Jz\":\"Unblock\",\"0VrZZv\":\"Unblock Account\",\"6pYY4t\":\"Undo repost\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"Unmute Account\",\"s12/Py\":\"Unmute thread\",\"vaz2uI\":[\"Update \",[\"displayName\"],\" in Lists\"],\"YXMY4w\":\"Update Available\",\"RXbEvi\":\"Updating...\",\"Vwkfp4\":\"Upload a text file to:\",\"jTdnU6\":\"Use app passwords to login to other Bluesky clients without giving full access to your account or password.\",\"CH1am9\":\"Use default provider\",\"ZG8UvP\":\"Use this to sign into the other app along with your handle.\",\"cKXwwI\":\"Used by:\",\"t4Yp4Z\":\"User handle\",\"8tsrUV\":\"User Lists\",\"nZx9mr\":\"Username or email address\",\"Sxm8rQ\":\"Users\",\"MBOY4U\":\"Verify email\",\"Ejyv0o\":\"Verify my email\",\"9czCrB\":\"Verify My Email\",\"ibSVGR\":\"Verify New Email\",\"nHsQde\":\"View debug entry\",\"47jzzd\":\"View the avatar\",\"wK4H1r\":\"Visit Site\",\"qjBGxf\":\"We're so excited to have you join us!\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"We're sorry! We can't find the page you were looking for.\",\"meB+tZ\":\"Welcome to <0>Bluesky\",\"Mj7rl/\":[\"What is the issue with this \",[\"collectionName\"],\"?\"],\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"I5S9ZE\":\"Wide\",\"y02THm\":\"Write post\",\"6ckZRB\":\"Write your reply\",\"l75CjT\":\"Yes\",\"STPj0e\":\"You can change hosting providers at any time.\",\"67nRLM\":\"You can now sign in with your new password.\",\"lIcbCU\":\"You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.\",\"aFZZYi\":\"You don't have any pinned feeds.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"You don't have any saved feeds.\",\"RkXibf\":\"You have blocked the author or you have been blocked by the author.\",\"tCLJ9E\":\"You have no lists.\",\"soH9qC\":\"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.\",\"NDgp3i\":\"You have not created any app passwords yet. You can create one by pressing the button below.\",\"grqdXb\":\"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.\",\"RrDyEb\":\"You will receive an email with a \\\"reset code.\\\" Enter that code here, then enter your new password.\",\"gdRnT7\":\"Your account\",\"k7hmsH\":\"Your birth date\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"Your email has been saved! We'll be in touch soon.\",\"z2L+/9\":\"Your email has been updated but not verified. As a next step, please verify your new email.\",\"XZlIVw\":\"Your email has not yet been verified. This is an important security step which we recommend.\",\"qv9f4I\":\"Your full handle will be\",\"lvcqqG\":\"Your hosting provider\",\"fbFyAZ\":\"Your invite codes are hidden when logged in using an App Password\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\",\"okRPtW\":\"Your profile\",\"MvWO9d\":\"Your user handle\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"EtUMsZ\":\". This warning is only available for posts with media attached.\",\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" List\"],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>Choose your<1>Recommended<2>Feeds\",\"F657la\":\"<0>Follow some<1>Recommended<2>Users\",\"6RmyWt\":\"<0>Here is your app password. Use this to sign into the other app along with your handle.\",\"XCTqGE\":\"A new version of the app is available. Please update to continue using the app.\",\"AnNF5e\":\"Accessibility\",\"AeXO77\":\"Account\",\"4WY4MD\":\"Account options\",\"m16xKo\":\"Add\",\"fBBX+K\":\"Add a content warning\",\"JU3hs2\":\"Add a user to this list\",\"MPPZ54\":\"Add account\",\"LkA8jz\":\"Add alt text\",\"Z8idyM\":\"Add details\",\"AoXl11\":\"Add details to report\",\"iE6B/9\":\"Add link card\",\"EXHdP1\":\"Add link card:\",\"x6laaL\":\"Add the following DNS record to your domain:\",\"UmzMP4\":\"Add to Lists\",\"hCrQ0L\":\"Add to my feeds\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"Adjust the number of likes a reply must have to be shown in your feed.\",\"qLa52r\":\"Adult Content\",\"sxkWRg\":\"Advanced\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"Alt text\",\"0QlT7/\":\"Alt text describes images for blind and low-vision users, and helps give context to everyone.\",\"woXbjq\":[\"An email has been sent to \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"Fon2dK\":[\"An email has been sent to your previous address, \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"HZFm5R\":\"and\",\"fdjKGe\":\"App Language\",\"SMmUnj\":\"App passwords\",\"8q4WlH\":\"App Passwords\",\"aAIQg2\":\"Appearance\",\"SSDZ+T\":[\"Are you sure you want to delete the app password \\\"\",[\"name\"],\"\\\"?\"],\"0BIeIs\":\"Are you sure you'd like to discard this draft?\",\"6foA8n\":\"Are you sure?\",\"/mSd6b\":\"Are you sure? This cannot be undone.\",\"EbvWd3\":\"Artistic or non-erotic nudity.\",\"iH8pgl\":\"Back\",\"ehOkF+\":\"Basics\",\"+gCI2a\":\"Birthday\",\"pieVBA\":\"Birthday:\",\"m1dqxu\":\"Block Account\",\"ffIfdM\":\"Block accounts\",\"fdYcMy\":\"Block these accounts?\",\"KWykPE\":\"Blocked accounts\",\"JuqQpF\":\"Blocked Accounts\",\"HG4qt4\":\"Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"8LNSUt\":\"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.\",\"HFCE4A\":\"Blocked post.\",\"zl+QbX\":\"Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"C50OGr\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"Camera\",\"JGGrPC\":\"Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long.\",\"dEgA5A\":\"Cancel\",\"aMH9rr\":\"Cancel account deletion\",\"kc3E4R\":\"Cancel add image alt text\",\"wg4LHQ\":\"Cancel change handle\",\"hFL1Li\":\"Cancel image crop\",\"tijH8t\":\"Cancel profile editing\",\"Qe4C/d\":\"Cancel quote post\",\"5TviPn\":\"Cancel search\",\"nss3UV\":\"Cancel waitlist signup\",\"o+XJ9D\":\"Change\",\"pQco5R\":\"Change handle\",\"Q5e1U/\":\"Change Handle\",\"a3NAfL\":\"Change my email\",\"4vatyk\":\"Change Your Email\",\"Yn3C90\":\"Check out some recommended feeds. Tap + to add them to your list of pinned feeds.\",\"ioZXIH\":\"Check out some recommended users. Follow them to see similar users.\",\"/+X+/K\":\"Check your inbox for an email with the confirmation code to enter below:\",\"Rt502e\":\"Choose Service\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"BwcLKv\":\"Choose your\",\"Wk8hkn\":\"Choose your password\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"Clear search query\",\"flH7u/\":\"Close alert\",\"hYmnbk\":\"Close bottom drawer\",\"47L1V1\":\"Close image\",\"l49ujN\":\"Close image viewer\",\"UryHFO\":\"Close navigation footer\",\"KHzDTk\":\"Community Guidelines\",\"o8UUti\":\"Compose reply\",\"7VpPHA\":\"Confirm\",\"q8upsf\":\"Confirm Change\",\"8pNKIr\":\"Confirm content language settings\",\"tGg8Kt\":\"Confirm delete account\",\"ioZOzk\":\"Confirmation code\",\"J28zul\":\"Connecting...\",\"l879p1\":\"Content filtering\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"cogwXi\":\"Content Warning\",\"FG7AQv\":\"Content warnings\",\"xGVfLh\":\"Continue\",\"6V3Ea3\":\"Copied\",\"he3ygx\":\"Copy\",\"iQgJaz\":\"Copy post text\",\"u40k/o\":\"Copyright Policy\",\"7wWvgo\":\"Could not load feed\",\"8NNr/O\":\"Could not load list\",\"mpt9T+\":\"Create a new account\",\"IS0nrP\":\"Create Account\",\"6HbhpU\":\"Create new account\",\"MXSt4t\":[\"Created \",[\"0\"]],\"GAD3Dx\":\"Custom domain\",\"ZQKLI1\":\"Danger Zone\",\"pvnfJD\":\"Dark\",\"ZDGm40\":\"Delete account\",\"vzX5FB\":\"Delete Account\",\"gUEtxf\":\"Delete app password\",\"84uE/A\":\"Delete List\",\"ktknoE\":\"Delete my account\",\"szz0+N\":\"Delete my account…\",\"04G5Az\":\"Delete post\",\"FbPNuJ\":\"Delete this post?\",\"u+1OHY\":\"Deleted post.\",\"Nu4oKW\":\"Description\",\"dacKHE\":\"Dev Server\",\"2ygkE8\":\"Developer Tools\",\"bzSI52\":\"Discard\",\"BryYJR\":\"Discard draft\",\"pbLwal\":\"Discover new feeds\",\"pfa8F0\":\"Display name\",\"0gS7M5\":\"Display Name\",\"iZ5pMB\":\"Domain verified!\",\"DPfwMq\":\"Done\",\"zT97vP\":[\"Done\",[\"extraText\"]],\"4uwlSD\":\"Each code works once. You'll receive more invite codes periodically.\",\"XQFMOm\":\"Edit image\",\"S7M0uU\":\"Edit list details\",\"cLmurE\":\"Edit My Feeds\",\"bRZ5XW\":\"Edit my profile\",\"9OpVZg\":\"Edit profile\",\"QJQd1J\":\"Edit Profile\",\"Jn7kox\":\"Edit Saved Feeds\",\"O3oNi5\":\"Email\",\"ATGYL1\":\"Email address\",\"pJJ0Vp\":\"Email Updated\",\"9Qs99X\":\"Email:\",\"96mted\":\"Enable this setting to only see replies between people you follow.\",\"YbIxza\":\"Enter the address of your provider:\",\"BfIgP6\":\"Enter the domain you want to use\",\"cHrOqs\":\"Enter the email you used to create your account. We'll send you a \\\"reset code\\\" so you can set a new password.\",\"xRPn3U\":\"Enter your email address\",\"+inPGm\":\"Enter your new email address below.\",\"T0KLp4\":\"Enter your username and password\",\"4BITzH\":\"Error:\",\"0PkE20\":\"Expand alt text\",\"/5K/KL\":\"Failed to load recommended feeds\",\"4yCy8i\":\"Feed offline\",\"N0CqyO\":\"Feed Preferences\",\"YirHq7\":\"Feedback\",\"2DoBvq\":\"Feeds\",\"I3iUBQ\":\"Feeds are created by users to curate content. Choose some feeds that you find interesting.\",\"2+6lmO\":\"Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information.\",\"Qzj1WT\":\"Finding similar accounts...\",\"QKSrQV\":\"Fine-tune the content you see on your home screen.\",\"r+KeyR\":\"Fine-tune the discussion threads.\",\"MKEPCY\":\"Follow\",\"AD4dxh\":\"Follow some\",\"Wezu5M\":\"Follow some users to get started. We can recommend you more users based on who you find interesting.\",\"YY2BTA\":\"Followed users only\",\"x5LEuB\":\"Followers\",\"NIjL2Y\":\"following\",\"y6sq5j\":\"Following\",\"p3UO/y\":\"Follows you\",\"5RhDkD\":\"For security reasons, we'll need to send a confirmation code to your email address.\",\"NJPhAO\":\"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.\",\"5bDfuq\":\"Forgot\",\"hEPLrs\":\"Forgot password\",\"dn8X5t\":\"Forgot Password\",\"U+kFad\":\"Gallery\",\"c3b0B0\":\"Get Started\",\"CKyk7Q\":\"Go back\",\"sr0UJD\":\"Go Back\",\"Rtp0y7\":\"Go to next\",\"Nf7oXL\":\"Handle\",\"c3XJ18\":\"Help\",\"uX/4+/\":\"Here is your app password.\",\"vLyv1R\":\"Hide\",\"qdOx2q\":\"Hide user list\",\"up7j9X\":\"Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.\",\"WTcLyw\":\"Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.\",\"/8MHCt\":\"Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.\",\"3zJH1g\":\"Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.\",\"yNNyhI\":\"Hmmm, we're having trouble finding this feed. It may have been deleted.\",\"i0qMbr\":\"Home\",\"sXZ8IU\":\"Home Feed Preferences\",\"yt7fhu\":\"Hosting provider\",\"s2xA6t\":\"Hosting provider address\",\"o+axy6\":\"I have a code\",\"wey2os\":\"I have my own domain\",\"WlEcKr\":\"If none are selected, suitable for all ages.\",\"VCk0rR\":\"Image alt text\",\"STGpNQ\":\"Image options\",\"6o7+En\":\"In Your Network\",\"dSKHAa\":\"Invalid username or password\",\"MFKlMB\":\"Invite\",\"F5MZVk\":\"Invite a Friend\",\"6KlkHI\":\"Invite code\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"Join the waitlist\",\"6iVTdm\":\"Join the waitlist.\",\"SNzppu\":\"Join Waitlist\",\"Dcq5kL\":\"Language selection\",\"pVhZHk\":\"Language Settings\",\"GAmD3h\":\"Languages\",\"NgeSlx\":\"Learn More\",\"rj0Lke\":\"Learn more about this warning\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"QfDITI\":\"Leaving Bluesky\",\"Esfg1M\":\"Let's get your password reset!\",\"exYcTF\":\"Library\",\"1njn7W\":\"Light\",\"BvSY1i\":\"Like this feed\",\"8/ALSr\":\"Liked by\",\"FuZWua\":\"List Avatar\",\"8mjA4F\":\"List Name\",\"h16FyT\":\"Lists\",\"ujW4FW\":\"Load more posts\",\"7EHsGr\":\"Load new notifications\",\"VkLESX\":\"Load new posts\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"Local dev server\",\"cR9UpQ\":\"Login to account that is not listed\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"Make sure this is where you intend to go!\",\"zucql+\":\"Menu\",\"DzmsLV\":\"Moderation\",\"NTIbv4\":\"Moderation lists\",\"FIJUJb\":\"More feeds\",\"3Siwmw\":\"More options\",\"Y17r45\":\"More post options\",\"RA1KUZ\":\"Mute Account\",\"du0opt\":\"Mute accounts\",\"izOxJM\":\"Mute these accounts?\",\"jq7SjD\":\"Mute thread\",\"s22grX\":\"Muted accounts\",\"qUa+lV\":\"Muted Accounts\",\"gA0D9A\":\"Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.\",\"1QJzM7\":\"Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.\",\"Mysqyf\":\"My Birthday\",\"6MBNS/\":\"My Feeds\",\"hKtWk2\":\"My Profile\",\"Ha6iBv\":\"My Saved Feeds\",\"6YtxFj\":\"Name\",\"8yolS6\":\"Never lose access to your followers and data.\",\"isRobC\":\"New\",\"2B7HLH\":\"New post\",\"FGrimz\":\"New Post\",\"hXzOVo\":\"Next\",\"EatZYJ\":\"Next image\",\"1UzENP\":\"No\",\"flmDTf\":\"No description\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"No results found for \\\"\",[\"query\"],\"\\\"\"],\"kA9DpB\":[\"No results found for \",[\"0\"]],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"Not Applicable\",\"iyUCYw\":\"Not Applicable.\",\"iDNBZe\":\"Notifications\",\"5GGAqz\":\"Oh no!\",\"UaXeX3\":\"Okay\",\"Cqo2D+\":\"One or more images is missing alt text.\",\"M/Q2aG\":\"Open navigation\",\"M5PuNq\":\"Opens configurable language settings\",\"eSqpax\":\"Opens modal for using custom domain\",\"vYwHHI\":\"Opens moderation settings\",\"0tHyB7\":\"Opens screen with all saved feeds\",\"nmRoY/\":\"Opens the app password settings page\",\"6e9Apv\":\"Opens the home feed preferences\",\"O87Dr/\":\"Opens the storybook page\",\"G+PVmg\":\"Opens the system log page\",\"Jqb7sy\":\"Opens the threads preferences\",\"b22AVl\":\"Other account\",\"n+HLOP\":\"Other service\",\"1PKxQ7\":\"Other...\",\"8F1i42\":\"Page not found\",\"8ZsakT\":\"Password\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"Password updated!\",\"VeZE5Q\":\"Pictures meant for adults.\",\"zgoxy5\":\"Pinned Feeds\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed.\",\"9qpQ5O\":\"Please enter a unique name for this App Password or use our randomly generated one.\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"Please enter your password as well:\",\"y28hnO\":\"Post\",\"h5RcXU\":\"Post hidden\",\"r5zLS0\":\"Post language\",\"AzCucI\":\"Post Languages\",\"tJFPmV\":\"Post not found\",\"0+DQbr\":\"Potentially Misleading Link\",\"MHk+7g\":\"Previous image\",\"HeBcM5\":\"Primary Language\",\"x8iR7V\":\"Prioritize Your Follows\",\"rjGI/Q\":\"Privacy\",\"LcET2C\":\"Privacy Policy\",\"k1ifdL\":\"Processing...\",\"vERlcd\":\"Profile\",\"MrgqOW\":\"Protect your account by verifying your email.\",\"p1UmBX\":\"Public, shareable lists which can drive feeds.\",\"8HFFRQ\":\"Quote post\",\"+KrAHa\":\"Quote Post\",\"WlWsdE\":\"Ratios\",\"WEYdDv\":\"Recommended\",\"QNzcT3\":\"Recommended Feeds\",\"41UoJb\":\"Recommended Users\",\"t/YqKh\":\"Remove\",\"p/cRzf\":[\"Remove \",[\"0\"],\" from my feeds?\"],\"1O32oy\":\"Remove account\",\"W44VX5\":\"Remove feed\",\"Yy3FzB\":\"Remove from my feeds\",\"5ywtDz\":\"Remove image\",\"Dw/XUh\":\"Remove image preview\",\"TbDEfs\":\"Remove this feed from your saved feeds?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"Reply Filters\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"bDHSjj\":\"Report Account\",\"NKmI9f\":\"Report feed\",\"6iwm2r\":\"Report List\",\"6IcSvC\":\"Report post\",\"mkude1\":\"Repost\",\"JOV5dR\":\"Repost or quote post\",\"0zb9FX\":\"Reposted by\",\"bqG37Z\":\"Request Change\",\"2d9VrZ\":\"Require alt text before posting\",\"8XIT+P\":\"Required for this provider\",\"vJgYMA\":\"Reset code\",\"xEL92I\":\"Reset onboarding state\",\"RfwZxd\":\"Reset password\",\"bee/Fw\":\"Reset preferences state\",\"wToeoz\":\"Resets the onboarding state\",\"nIU7qI\":\"Resets the preferences state\",\"6gRgw8\":\"Retry\",\"hAbYQa\":\"Retry change handle\",\"tfDRzk\":\"Save\",\"KV2YQQ\":\"Save alt text\",\"y3aU20\":\"Save changes\",\"IUwGEM\":\"Save Changes\",\"Xs07Tg\":\"Save handle change\",\"BckA7m\":\"Save image crop\",\"+K+JDj\":\"Saved Feeds\",\"A1taO8\":\"Search\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"Security Step Required\",\"cNzyJW\":\"See what's next\",\"L5sM7N\":\"Select Bluesky Social\",\"o3dwub\":\"Select from an existing account\",\"GGw2AK\":\"Select service\",\"vECNLO\":\"Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown.\",\"m5aabx\":\"Select your app language for the default text to display in the app\",\"TiiOza\":\"Select your preferred language for translations in your feed.\",\"vp9yIB\":\"Send Confirmation Email\",\"65dxv8\":\"Send email\",\"i/TzEU\":\"Send Email\",\"RoafuO\":\"Send feedback\",\"4cijjm\":\"Send Report\",\"V/e7nf\":\"Set new password\",\"gwsie4\":\"Set this setting to \\\"No\\\" to hide all quote posts from your feed. Reposts will still be visible.\",\"IZjC3J\":\"Set this setting to \\\"No\\\" to hide all replies from your feed.\",\"KIgU3l\":\"Set this setting to \\\"No\\\" to hide all reposts from your feed.\",\"zaAyrz\":\"Set this setting to \\\"Yes\\\" to show replies in a threaded view. This is an experimental feature.\",\"fQV2eE\":\"Set this setting to \\\"Yes\\\" to show samples of your saved feeds in your following feed. This is an experimental feature.\",\"Tz0i8g\":\"Settings\",\"HfWHhJ\":\"Sexual activity or erotic nudity.\",\"Z8lGw6\":\"Share\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"Share link\",\"8vETh9\":\"Show\",\"aWAdCb\":\"Show anyway\",\"NijgXr\":\"Show Posts from My Feeds\",\"T3Mt8m\":\"Show Quote Posts\",\"BlW8X/\":\"Show Replies\",\"X4GwDb\":\"Show replies by people you follow before all other replies.\",\"GiogzH\":\"Show Reposts\",\"fhY/fL\":\"Show users\",\"5lWFkC\":\"Sign in\",\"n1ekoW\":\"Sign In\",\"N9o7n5\":[\"Sign in as \",[\"0\"]],\"FT1MVS\":\"Sign in as...\",\"+UpfFC\":\"Sign into\",\"fcWrnU\":\"Sign out\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"Signed in as\",\"6Uau97\":\"Skip\",\"0o5BFH\":\"Sort Replies\",\"GH1Rgk\":\"Sort replies to the same post by:\",\"1DA6ap\":\"Square\",\"aKEHLj\":\"Staging\",\"tgEXwM\":\"Status page\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"Subscribe\",\"5z3ICN\":\"Subscribe to this list\",\"TVFyMD\":\"Suggested Follows\",\"XYLcNv\":\"Support\",\"VjWeLI\":\"Switch Account\",\"D+NlUC\":\"System\",\"fP8jTZ\":\"System log\",\"HF6Iah\":\"Tall\",\"4Y5H+g\":\"Terms\",\"xowcRf\":\"Terms of Service\",\"p8Iz39\":\"Text input field\",\"GlPXQJ\":\"The account will be able to interact with you after unblocking.\",\"o4M2MP\":\"The Community Guidelines have been moved to <0/>\",\"U42lKc\":\"The Copyright Policy has been moved to <0/>\",\"G4EksE\":\"The post may have been deleted.\",\"WNR9db\":\"The Privacy Policy has been moved to <0/>\",\"LbEbIk\":[\"The support form has been moved. If you need help, please<0/> or visit \",[\"HELP_DESK_URL\"],\" to get in touch with us.\"],\"FGbRSr\":\"The Terms of Service have been moved to\",\"yUqcy2\":\"There was an unexpected issue in the application. Please let us know if this happened to you!\",\"KRYn8w\":[\"This \",[\"screenDescription\"],\" has been flagged:\"],\"lm845B\":\"This information is not shared with other users.\",\"5Pvw/O\":\"This is important in case you ever need to change your email or reset your password.\",\"sQQfZ9\":\"This is the service that keeps you online.\",\"CvX8qs\":\"This link is taking you to the following website:\",\"WKrUVy\":\"This post has been deleted.\",\"qpCA5s\":\"This warning is only available for posts with media attached.\",\"u9ThjD\":\"Thread Preferences\",\"zmXsk5\":\"Threaded Mode\",\"1x30Qt\":\"Toggle dropdown\",\"KFXQEt\":\"Transformations\",\"pi8x/S\":\"Translate\",\"KDw4GX\":\"Try again\",\"nc4Wfd\":\"Unable to contact your service. Please check your Internet connection.\",\"tuS5Jz\":\"Unblock\",\"0VrZZv\":\"Unblock Account\",\"6pYY4t\":\"Undo repost\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"Unmute Account\",\"s12/Py\":\"Unmute thread\",\"vaz2uI\":[\"Update \",[\"displayName\"],\" in Lists\"],\"YXMY4w\":\"Update Available\",\"RXbEvi\":\"Updating...\",\"Vwkfp4\":\"Upload a text file to:\",\"jTdnU6\":\"Use app passwords to login to other Bluesky clients without giving full access to your account or password.\",\"CH1am9\":\"Use default provider\",\"ZG8UvP\":\"Use this to sign into the other app along with your handle.\",\"cKXwwI\":\"Used by:\",\"t4Yp4Z\":\"User handle\",\"8tsrUV\":\"User Lists\",\"nZx9mr\":\"Username or email address\",\"Sxm8rQ\":\"Users\",\"MBOY4U\":\"Verify email\",\"Ejyv0o\":\"Verify my email\",\"9czCrB\":\"Verify My Email\",\"ibSVGR\":\"Verify New Email\",\"nHsQde\":\"View debug entry\",\"47jzzd\":\"View the avatar\",\"wK4H1r\":\"Visit Site\",\"qjBGxf\":\"We're so excited to have you join us!\",\"1xpRAp\":\"We're sorry, but this content is not viewable without a Bluesky account.\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"We're sorry! We can't find the page you were looking for.\",\"meB+tZ\":\"Welcome to <0>Bluesky\",\"Mj7rl/\":[\"What is the issue with this \",[\"collectionName\"],\"?\"],\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"I5S9ZE\":\"Wide\",\"y02THm\":\"Write post\",\"6ckZRB\":\"Write your reply\",\"l75CjT\":\"Yes\",\"STPj0e\":\"You can change hosting providers at any time.\",\"67nRLM\":\"You can now sign in with your new password.\",\"lIcbCU\":\"You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.\",\"aFZZYi\":\"You don't have any pinned feeds.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"You don't have any saved feeds.\",\"RkXibf\":\"You have blocked the author or you have been blocked by the author.\",\"tCLJ9E\":\"You have no lists.\",\"soH9qC\":\"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.\",\"NDgp3i\":\"You have not created any app passwords yet. You can create one by pressing the button below.\",\"grqdXb\":\"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.\",\"RrDyEb\":\"You will receive an email with a \\\"reset code.\\\" Enter that code here, then enter your new password.\",\"gdRnT7\":\"Your account\",\"k7hmsH\":\"Your birth date\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"Your email has been saved! We'll be in touch soon.\",\"z2L+/9\":\"Your email has been updated but not verified. As a next step, please verify your new email.\",\"XZlIVw\":\"Your email has not yet been verified. This is an important security step which we recommend.\",\"qv9f4I\":\"Your full handle will be\",\"lvcqqG\":\"Your hosting provider\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\",\"okRPtW\":\"Your profile\",\"MvWO9d\":\"Your user handle\"}")}; \ No newline at end of file diff --git a/src/locale/locales/cs/messages.po b/src/locale/locales/cs/messages.po index c3e231fc..92100b35 100644 --- a/src/locale/locales/cs/messages.po +++ b/src/locale/locales/cs/messages.po @@ -21,12 +21,6 @@ msgstr "" #~ msgid ". This warning is only available for posts with media attached." #~ msgstr "" -#: src/view/screens/Settings.tsx:410 -#: src/view/shell/desktop/RightNav.tsx:158 -#: src/view/shell/Drawer.tsx:527 -msgid "{0, plural, one {# invite code available} other {# invite codes available}}" -msgstr "" - #: src/view/com/modals/Repost.tsx:44 msgid "{0}" msgstr "" @@ -35,11 +29,6 @@ msgstr "" msgid "{0} {purposeLabel} List" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:141 -#: src/view/shell/Drawer.tsx:504 -msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" -msgstr "" - #: src/view/screens/Search/Search.tsx:86 msgid "{message}" msgstr "" @@ -61,12 +50,12 @@ msgid "A new version of the app is available. Please update to continue using th msgstr "" #: src/view/com/modals/EditImage.tsx:299 -#: src/view/screens/Settings.tsx:422 +#: src/view/screens/Settings.tsx:410 msgid "Accessibility" msgstr "" #: src/view/com/auth/login/LoginForm.tsx:161 -#: src/view/screens/Settings.tsx:289 +#: src/view/screens/Settings.tsx:288 msgid "Account" msgstr "" @@ -88,8 +77,8 @@ msgstr "" msgid "Add a user to this list" msgstr "" -#: src/view/screens/Settings.tsx:358 -#: src/view/screens/Settings.tsx:367 +#: src/view/screens/Settings.tsx:357 +#: src/view/screens/Settings.tsx:366 msgid "Add account" msgstr "" @@ -140,7 +129,7 @@ msgstr "" msgid "Adult Content" msgstr "" -#: src/view/screens/Settings.tsx:574 +#: src/view/screens/Settings.tsx:562 msgid "Advanced" msgstr "" @@ -172,7 +161,7 @@ msgstr "" msgid "App Language" msgstr "" -#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:582 msgid "App passwords" msgstr "" @@ -180,7 +169,7 @@ msgstr "" msgid "App Passwords" msgstr "" -#: src/view/screens/Settings.tsx:437 +#: src/view/screens/Settings.tsx:425 msgid "Appearance" msgstr "" @@ -205,7 +194,7 @@ msgid "Artistic or non-erotic nudity." msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:145 -#: src/view/com/auth/login/ChooseAccountForm.tsx:122 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 #: src/view/com/auth/login/LoginForm.tsx:251 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 @@ -217,7 +206,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/view/screens/Settings.tsx:466 +#: src/view/screens/Settings.tsx:454 msgid "Basics" msgstr "" @@ -226,7 +215,7 @@ msgstr "" msgid "Birthday" msgstr "" -#: src/view/screens/Settings.tsx:315 +#: src/view/screens/Settings.tsx:314 msgid "Birthday:" msgstr "" @@ -291,7 +280,7 @@ msgstr "" msgid "Bluesky.Social" msgstr "" -#: src/view/screens/Settings.tsx:723 +#: src/view/screens/Settings.tsx:711 msgid "Build version {0} {1}" msgstr "" @@ -359,12 +348,12 @@ msgstr "" msgid "Cancel waitlist signup" msgstr "" -#: src/view/screens/Settings.tsx:309 +#: src/view/screens/Settings.tsx:308 msgid "Change" msgstr "" -#: src/view/screens/Settings.tsx:606 -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:603 msgid "Change handle" msgstr "" @@ -408,19 +397,19 @@ msgstr "" msgid "Choose your password" msgstr "" -#: src/view/screens/Settings.tsx:699 +#: src/view/screens/Settings.tsx:687 msgid "Clear all legacy storage data" msgstr "" -#: src/view/screens/Settings.tsx:701 +#: src/view/screens/Settings.tsx:689 msgid "Clear all legacy storage data (restart after this)" msgstr "" -#: src/view/screens/Settings.tsx:711 +#: src/view/screens/Settings.tsx:699 msgid "Clear all storage data" msgstr "" -#: src/view/screens/Settings.tsx:713 +#: src/view/screens/Settings.tsx:701 msgid "Clear all storage data (restart after this)" msgstr "" @@ -561,7 +550,7 @@ msgstr "" msgid "Custom domain" msgstr "" -#: src/view/screens/Settings.tsx:620 +#: src/view/screens/Settings.tsx:608 msgid "Danger Zone" msgstr "" @@ -569,7 +558,7 @@ msgstr "" #~ msgid "Dark" #~ msgstr "" -#: src/view/screens/Settings.tsx:627 +#: src/view/screens/Settings.tsx:615 msgid "Delete account" msgstr "" @@ -591,7 +580,7 @@ msgstr "" msgid "Delete my account" msgstr "" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:625 msgid "Delete my account…" msgstr "" @@ -618,7 +607,7 @@ msgstr "" msgid "Dev Server" msgstr "" -#: src/view/screens/Settings.tsx:642 +#: src/view/screens/Settings.tsx:630 msgid "Developer Tools" msgstr "" @@ -677,7 +666,7 @@ msgid "Edit list details" msgstr "" #: src/view/screens/Feeds.tsx:367 -#: src/view/screens/SavedFeeds.tsx:75 +#: src/view/screens/SavedFeeds.tsx:85 msgid "Edit My Feeds" msgstr "" @@ -712,7 +701,7 @@ msgstr "" msgid "Email Updated" msgstr "" -#: src/view/screens/Settings.tsx:293 +#: src/view/screens/Settings.tsx:292 msgid "Email:" msgstr "" @@ -757,7 +746,7 @@ msgstr "" msgid "Failed to load recommended feeds" msgstr "" -#: src/view/screens/Feeds.tsx:558 +#: src/view/screens/Feeds.tsx:559 msgid "Feed offline" msgstr "" @@ -765,12 +754,12 @@ msgstr "" msgid "Feed Preferences" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:64 +#: src/view/shell/desktop/RightNav.tsx:65 #: src/view/shell/Drawer.tsx:411 msgid "Feedback" msgstr "" -#: src/view/screens/Feeds.tsx:474 +#: src/view/screens/Feeds.tsx:475 #: src/view/shell/bottom-bar/BottomBar.tsx:169 #: src/view/shell/desktop/LeftNav.tsx:342 #: src/view/shell/Drawer.tsx:328 @@ -782,7 +771,7 @@ msgstr "" msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." msgstr "" -#: src/view/screens/SavedFeeds.tsx:132 +#: src/view/screens/SavedFeeds.tsx:156 msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." msgstr "" @@ -884,7 +873,7 @@ msgstr "" msgid "Handle" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:93 +#: src/view/shell/desktop/RightNav.tsx:94 #: src/view/shell/Drawer.tsx:421 msgid "Help" msgstr "" @@ -901,6 +890,26 @@ msgstr "" msgid "Hide user list" msgstr "" +#: src/view/com/posts/FeedErrorMessage.tsx:101 +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:89 +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:95 +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:92 +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:86 +msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +msgstr "" + #: src/view/shell/bottom-bar/BottomBar.tsx:125 #: src/view/shell/desktop/LeftNav.tsx:306 #: src/view/shell/Drawer.tsx:275 @@ -908,9 +917,9 @@ msgstr "" msgid "Home" msgstr "" -#: src/view/com/pager/FeedsTabBarMobile.tsx:71 +#: src/view/com/pager/FeedsTabBarMobile.tsx:99 #: src/view/screens/PreferencesHomeFeed.tsx:95 -#: src/view/screens/Settings.tsx:486 +#: src/view/screens/Settings.tsx:474 msgid "Home Feed Preferences" msgstr "" @@ -953,12 +962,12 @@ msgstr "" msgid "Invalid username or password" msgstr "" -#: src/view/screens/Settings.tsx:386 +#: src/view/screens/Settings.tsx:385 msgid "Invite" msgstr "" #: src/view/com/modals/InviteCodes.tsx:91 -#: src/view/screens/Settings.tsx:374 +#: src/view/screens/Settings.tsx:373 msgid "Invite a Friend" msgstr "" @@ -991,7 +1000,7 @@ msgstr "" msgid "Language Settings" msgstr "" -#: src/view/screens/Settings.tsx:546 +#: src/view/screens/Settings.tsx:534 msgid "Languages" msgstr "" @@ -1031,7 +1040,7 @@ msgstr "" #~ msgid "Light" #~ msgstr "" -#: src/view/screens/ProfileFeed.tsx:625 +#: src/view/screens/ProfileFeed.tsx:626 msgid "Like this feed" msgstr "" @@ -1059,7 +1068,7 @@ msgstr "" msgid "Load more posts" msgstr "" -#: src/view/screens/Notifications.tsx:120 +#: src/view/screens/Notifications.tsx:130 msgid "Load new notifications" msgstr "" @@ -1075,11 +1084,11 @@ msgstr "" msgid "Local dev server" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:104 +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 msgid "Login to account that is not listed" msgstr "" -#: src/view/screens/ProfileFeed.tsx:477 +#: src/view/screens/ProfileFeed.tsx:478 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 "" @@ -1092,7 +1101,7 @@ msgid "Menu" msgstr "" #: src/view/screens/Moderation.tsx:51 -#: src/view/screens/Settings.tsx:568 +#: src/view/screens/Settings.tsx:556 #: src/view/shell/desktop/LeftNav.tsx:400 #: src/view/shell/Drawer.tsx:346 #: src/view/shell/Drawer.tsx:347 @@ -1108,7 +1117,7 @@ msgid "More feeds" msgstr "" #: src/view/com/profile/ProfileHeader.tsx:506 -#: src/view/screens/ProfileFeed.tsx:367 +#: src/view/screens/ProfileFeed.tsx:368 #: src/view/screens/ProfileList.tsx:506 msgid "More options" msgstr "" @@ -1161,7 +1170,7 @@ msgstr "" msgid "My Profile" msgstr "" -#: src/view/screens/Settings.tsx:525 +#: src/view/screens/Settings.tsx:513 msgid "My Saved Feeds" msgstr "" @@ -1179,9 +1188,9 @@ msgid "New" msgstr "" #: src/view/com/feeds/FeedPage.tsx:187 -#: src/view/screens/Feeds.tsx:509 -#: src/view/screens/Profile.tsx:380 -#: src/view/screens/ProfileFeed.tsx:447 +#: src/view/screens/Feeds.tsx:510 +#: src/view/screens/Profile.tsx:381 +#: src/view/screens/ProfileFeed.tsx:448 #: src/view/screens/ProfileList.tsx:199 #: src/view/screens/ProfileList.tsx:231 #: src/view/shell/desktop/LeftNav.tsx:255 @@ -1212,7 +1221,7 @@ msgstr "" msgid "No" msgstr "" -#: src/view/screens/ProfileFeed.tsx:618 +#: src/view/screens/ProfileFeed.tsx:619 #: src/view/screens/ProfileList.tsx:632 msgid "No description" msgstr "" @@ -1221,7 +1230,7 @@ msgstr "" msgid "No result" msgstr "" -#: src/view/screens/Feeds.tsx:451 +#: src/view/screens/Feeds.tsx:452 msgid "No results found for \"{query}\"" msgstr "" @@ -1246,8 +1255,8 @@ msgstr "" msgid "Not Applicable." msgstr "" -#: src/view/screens/Notifications.tsx:87 -#: src/view/screens/Notifications.tsx:111 +#: src/view/screens/Notifications.tsx:97 +#: src/view/screens/Notifications.tsx:121 #: src/view/shell/bottom-bar/BottomBar.tsx:196 #: src/view/shell/desktop/LeftNav.tsx:364 #: src/view/shell/Drawer.tsx:299 @@ -1267,52 +1276,47 @@ msgstr "" msgid "One or more images is missing alt text." msgstr "" -#: src/view/com/pager/FeedsTabBarMobile.tsx:51 +#: src/view/com/pager/FeedsTabBarMobile.tsx:79 msgid "Open navigation" msgstr "" -#: src/view/screens/Settings.tsx:538 +#: src/view/screens/Settings.tsx:526 msgid "Opens configurable language settings" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:146 -#: src/view/shell/Drawer.tsx:509 -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:563 +#: src/view/screens/Settings.tsx:551 msgid "Opens moderation settings" msgstr "" -#: src/view/screens/Settings.tsx:519 +#: src/view/screens/Settings.tsx:507 msgid "Opens screen with all saved feeds" msgstr "" -#: src/view/screens/Settings.tsx:586 +#: src/view/screens/Settings.tsx:574 msgid "Opens the app password settings page" msgstr "" -#: src/view/screens/Settings.tsx:478 +#: src/view/screens/Settings.tsx:466 msgid "Opens the home feed preferences" msgstr "" -#: src/view/screens/Settings.tsx:669 +#: src/view/screens/Settings.tsx:657 msgid "Opens the storybook page" msgstr "" -#: src/view/screens/Settings.tsx:649 +#: src/view/screens/Settings.tsx:637 msgid "Opens the system log page" msgstr "" -#: src/view/screens/Settings.tsx:499 +#: src/view/screens/Settings.tsx:487 msgid "Opens the threads preferences" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:109 +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" msgstr "" @@ -1349,7 +1353,7 @@ msgstr "" msgid "Pictures meant for adults." msgstr "" -#: src/view/screens/SavedFeeds.tsx:79 +#: src/view/screens/SavedFeeds.tsx:89 msgid "Pinned Feeds" msgstr "" @@ -1415,7 +1419,7 @@ msgstr "" msgid "Prioritize Your Follows" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:75 +#: src/view/shell/desktop/RightNav.tsx:76 msgid "Privacy" msgstr "" @@ -1434,7 +1438,7 @@ msgstr "" msgid "Profile" msgstr "" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:782 msgid "Protect your account by verifying your email." msgstr "" @@ -1476,7 +1480,7 @@ msgstr "" msgid "Remove" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:92 +#: src/view/com/feeds/FeedSourceCard.tsx:108 msgid "Remove {0} from my feeds?" msgstr "" @@ -1484,11 +1488,11 @@ msgstr "" msgid "Remove account" msgstr "" -#: src/view/com/posts/FeedErrorMessage.tsx:106 +#: src/view/com/posts/FeedErrorMessage.tsx:118 msgid "Remove feed" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:91 +#: src/view/com/feeds/FeedSourceCard.tsx:107 #: src/view/screens/ProfileFeed.tsx:278 msgid "Remove from my feeds" msgstr "" @@ -1501,7 +1505,7 @@ msgstr "" msgid "Remove image preview" msgstr "" -#: src/view/com/posts/FeedErrorMessage.tsx:107 +#: src/view/com/posts/FeedErrorMessage.tsx:119 msgid "Remove this feed from your saved feeds?" msgstr "" @@ -1565,7 +1569,7 @@ msgstr "" msgid "Reset code" msgstr "" -#: src/view/screens/Settings.tsx:691 +#: src/view/screens/Settings.tsx:679 msgid "Reset onboarding state" msgstr "" @@ -1573,15 +1577,15 @@ msgstr "" msgid "Reset password" msgstr "" -#: src/view/screens/Settings.tsx:681 +#: src/view/screens/Settings.tsx:669 msgid "Reset preferences state" msgstr "" -#: src/view/screens/Settings.tsx:689 +#: src/view/screens/Settings.tsx:677 msgid "Resets the onboarding state" msgstr "" -#: src/view/screens/Settings.tsx:679 +#: src/view/screens/Settings.tsx:667 msgid "Resets the preferences state" msgstr "" @@ -1628,7 +1632,7 @@ msgstr "" msgid "Save image crop" msgstr "" -#: src/view/screens/SavedFeeds.tsx:105 +#: src/view/screens/SavedFeeds.tsx:122 msgid "Saved Feeds" msgstr "" @@ -1726,7 +1730,7 @@ msgstr "" 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:280 +#: src/view/screens/Settings.tsx:279 #: src/view/shell/desktop/LeftNav.tsx:436 #: src/view/shell/Drawer.tsx:380 #: src/view/shell/Drawer.tsx:381 @@ -1751,7 +1755,7 @@ msgstr "" #~ msgid "Share link" #~ msgstr "" -#: src/view/screens/Settings.tsx:319 +#: src/view/screens/Settings.tsx:318 msgid "Show" msgstr "" @@ -1795,11 +1799,11 @@ msgstr "" msgid "Sign In" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:37 +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 msgid "Sign in as {0}" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:94 +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 #: src/view/com/auth/login/Login.tsx:100 msgid "Sign in as..." msgstr "" @@ -1823,7 +1827,7 @@ msgstr "" msgid "Sign up or sign in to join the conversation" msgstr "" -#: src/view/screens/Settings.tsx:330 +#: src/view/screens/Settings.tsx:329 msgid "Signed in as" msgstr "" @@ -1848,11 +1852,11 @@ msgstr "" msgid "Staging" msgstr "" -#: src/view/screens/Settings.tsx:735 +#: src/view/screens/Settings.tsx:723 msgid "Status page" msgstr "" -#: src/view/screens/Settings.tsx:671 +#: src/view/screens/Settings.tsx:659 msgid "Storybook" msgstr "" @@ -1881,7 +1885,7 @@ msgstr "" #~ msgid "System" #~ msgstr "" -#: src/view/screens/Settings.tsx:651 +#: src/view/screens/Settings.tsx:639 msgid "System log" msgstr "" @@ -1889,7 +1893,7 @@ msgstr "" msgid "Tall" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:84 +#: src/view/shell/desktop/RightNav.tsx:85 msgid "Terms" msgstr "" @@ -1962,7 +1966,7 @@ msgid "This warning is only available for posts with media attached." msgstr "" #: src/view/screens/PreferencesThreads.tsx:53 -#: src/view/screens/Settings.tsx:508 +#: src/view/screens/Settings.tsx:496 msgid "Thread Preferences" msgstr "" @@ -2069,15 +2073,15 @@ msgstr "" msgid "Users" msgstr "" -#: src/view/screens/Settings.tsx:755 +#: src/view/screens/Settings.tsx:743 msgid "Verify email" msgstr "" -#: src/view/screens/Settings.tsx:780 +#: src/view/screens/Settings.tsx:768 msgid "Verify my email" msgstr "" -#: src/view/screens/Settings.tsx:789 +#: src/view/screens/Settings.tsx:777 msgid "Verify My Email" msgstr "" @@ -2102,6 +2106,10 @@ msgstr "" msgid "We're so excited to have you join us!" msgstr "" +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "We're sorry, but this content is not viewable without a Bluesky account." +msgstr "" + #: src/view/screens/Search/Search.tsx:236 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" @@ -2157,7 +2165,7 @@ msgstr "" 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:92 +#: src/view/screens/SavedFeeds.tsx:102 msgid "You don't have any pinned feeds." msgstr "" @@ -2165,7 +2173,7 @@ msgstr "" msgid "You don't have any saved feeds!" msgstr "" -#: src/view/screens/SavedFeeds.tsx:118 +#: src/view/screens/SavedFeeds.tsx:135 msgid "You don't have any saved feeds." msgstr "" @@ -2228,12 +2236,6 @@ msgstr "" msgid "Your hosting provider" msgstr "" -#: src/view/screens/Settings.tsx:405 -#: src/view/shell/desktop/RightNav.tsx:127 -#: src/view/shell/Drawer.tsx:523 -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 "" diff --git a/src/locale/locales/en/messages.js b/src/locale/locales/en/messages.js index 3b56d1f1..93651032 100644 --- a/src/locale/locales/en/messages.js +++ b/src/locale/locales/en/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"EtUMsZ\":\". This warning is only available for posts with media attached.\",\"ebOBhv\":[[\"0\",\"plural\",{\"one\":[\"#\",\" invite code available\"],\"other\":[\"#\",\" invite codes available\"]}]],\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" List\"],\"zgN03j\":[[\"invitesAvailable\",\"plural\",{\"one\":[\"Invite codes: \",\"#\",\" available\"],\"other\":[\"Invite codes: \",\"#\",\" available\"]}]],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>Choose your<1>Recommended<2>Feeds\",\"F657la\":\"<0>Follow some<1>Recommended<2>Users\",\"6RmyWt\":\"<0>Here is your app password. Use this to sign into the other app along with your handle.\",\"XCTqGE\":\"A new version of the app is available. Please update to continue using the app.\",\"AnNF5e\":\"Accessibility\",\"AeXO77\":\"Account\",\"4WY4MD\":\"Account options\",\"m16xKo\":\"Add\",\"fBBX+K\":\"Add a content warning\",\"JU3hs2\":\"Add a user to this list\",\"MPPZ54\":\"Add account\",\"LkA8jz\":\"Add alt text\",\"Z8idyM\":\"Add details\",\"AoXl11\":\"Add details to report\",\"iE6B/9\":\"Add link card\",\"EXHdP1\":\"Add link card:\",\"x6laaL\":\"Add the following DNS record to your domain:\",\"UmzMP4\":\"Add to Lists\",\"hCrQ0L\":\"Add to my feeds\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"Adjust the number of likes a reply must have to be shown in your feed.\",\"qLa52r\":\"Adult Content\",\"sxkWRg\":\"Advanced\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"Alt text\",\"0QlT7/\":\"Alt text describes images for blind and low-vision users, and helps give context to everyone.\",\"woXbjq\":[\"An email has been sent to \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"Fon2dK\":[\"An email has been sent to your previous address, \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"HZFm5R\":\"and\",\"fdjKGe\":\"App Language\",\"SMmUnj\":\"App passwords\",\"8q4WlH\":\"App Passwords\",\"aAIQg2\":\"Appearance\",\"SSDZ+T\":[\"Are you sure you want to delete the app password \\\"\",[\"name\"],\"\\\"?\"],\"0BIeIs\":\"Are you sure you'd like to discard this draft?\",\"6foA8n\":\"Are you sure?\",\"/mSd6b\":\"Are you sure? This cannot be undone.\",\"EbvWd3\":\"Artistic or non-erotic nudity.\",\"iH8pgl\":\"Back\",\"ehOkF+\":\"Basics\",\"+gCI2a\":\"Birthday\",\"pieVBA\":\"Birthday:\",\"m1dqxu\":\"Block Account\",\"ffIfdM\":\"Block accounts\",\"fdYcMy\":\"Block these accounts?\",\"KWykPE\":\"Blocked accounts\",\"JuqQpF\":\"Blocked Accounts\",\"HG4qt4\":\"Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"8LNSUt\":\"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.\",\"HFCE4A\":\"Blocked post.\",\"zl+QbX\":\"Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"C50OGr\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"Camera\",\"JGGrPC\":\"Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long.\",\"dEgA5A\":\"Cancel\",\"aMH9rr\":\"Cancel account deletion\",\"kc3E4R\":\"Cancel add image alt text\",\"wg4LHQ\":\"Cancel change handle\",\"hFL1Li\":\"Cancel image crop\",\"tijH8t\":\"Cancel profile editing\",\"Qe4C/d\":\"Cancel quote post\",\"5TviPn\":\"Cancel search\",\"nss3UV\":\"Cancel waitlist signup\",\"o+XJ9D\":\"Change\",\"pQco5R\":\"Change handle\",\"Q5e1U/\":\"Change Handle\",\"a3NAfL\":\"Change my email\",\"4vatyk\":\"Change Your Email\",\"Yn3C90\":\"Check out some recommended feeds. Tap + to add them to your list of pinned feeds.\",\"ioZXIH\":\"Check out some recommended users. Follow them to see similar users.\",\"/+X+/K\":\"Check your inbox for an email with the confirmation code to enter below:\",\"Rt502e\":\"Choose Service\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"BwcLKv\":\"Choose your\",\"Wk8hkn\":\"Choose your password\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"Clear search query\",\"flH7u/\":\"Close alert\",\"hYmnbk\":\"Close bottom drawer\",\"47L1V1\":\"Close image\",\"l49ujN\":\"Close image viewer\",\"UryHFO\":\"Close navigation footer\",\"KHzDTk\":\"Community Guidelines\",\"o8UUti\":\"Compose reply\",\"7VpPHA\":\"Confirm\",\"q8upsf\":\"Confirm Change\",\"8pNKIr\":\"Confirm content language settings\",\"tGg8Kt\":\"Confirm delete account\",\"ioZOzk\":\"Confirmation code\",\"J28zul\":\"Connecting...\",\"l879p1\":\"Content filtering\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"cogwXi\":\"Content Warning\",\"FG7AQv\":\"Content warnings\",\"xGVfLh\":\"Continue\",\"6V3Ea3\":\"Copied\",\"he3ygx\":\"Copy\",\"iQgJaz\":\"Copy post text\",\"u40k/o\":\"Copyright Policy\",\"7wWvgo\":\"Could not load feed\",\"8NNr/O\":\"Could not load list\",\"mpt9T+\":\"Create a new account\",\"IS0nrP\":\"Create Account\",\"6HbhpU\":\"Create new account\",\"MXSt4t\":[\"Created \",[\"0\"]],\"GAD3Dx\":\"Custom domain\",\"ZQKLI1\":\"Danger Zone\",\"pvnfJD\":\"Dark\",\"ZDGm40\":\"Delete account\",\"vzX5FB\":\"Delete Account\",\"gUEtxf\":\"Delete app password\",\"84uE/A\":\"Delete List\",\"ktknoE\":\"Delete my account\",\"szz0+N\":\"Delete my account…\",\"04G5Az\":\"Delete post\",\"FbPNuJ\":\"Delete this post?\",\"u+1OHY\":\"Deleted post.\",\"Nu4oKW\":\"Description\",\"dacKHE\":\"Dev Server\",\"2ygkE8\":\"Developer Tools\",\"bzSI52\":\"Discard\",\"BryYJR\":\"Discard draft\",\"pbLwal\":\"Discover new feeds\",\"pfa8F0\":\"Display name\",\"0gS7M5\":\"Display Name\",\"iZ5pMB\":\"Domain verified!\",\"DPfwMq\":\"Done\",\"zT97vP\":[\"Done\",[\"extraText\"]],\"4uwlSD\":\"Each code works once. You'll receive more invite codes periodically.\",\"XQFMOm\":\"Edit image\",\"S7M0uU\":\"Edit list details\",\"cLmurE\":\"Edit My Feeds\",\"bRZ5XW\":\"Edit my profile\",\"9OpVZg\":\"Edit profile\",\"QJQd1J\":\"Edit Profile\",\"Jn7kox\":\"Edit Saved Feeds\",\"O3oNi5\":\"Email\",\"ATGYL1\":\"Email address\",\"pJJ0Vp\":\"Email Updated\",\"9Qs99X\":\"Email:\",\"96mted\":\"Enable this setting to only see replies between people you follow.\",\"YbIxza\":\"Enter the address of your provider:\",\"BfIgP6\":\"Enter the domain you want to use\",\"cHrOqs\":\"Enter the email you used to create your account. We'll send you a \\\"reset code\\\" so you can set a new password.\",\"xRPn3U\":\"Enter your email address\",\"+inPGm\":\"Enter your new email address below.\",\"T0KLp4\":\"Enter your username and password\",\"4BITzH\":\"Error:\",\"0PkE20\":\"Expand alt text\",\"/5K/KL\":\"Failed to load recommended feeds\",\"4yCy8i\":\"Feed offline\",\"N0CqyO\":\"Feed Preferences\",\"YirHq7\":\"Feedback\",\"2DoBvq\":\"Feeds\",\"I3iUBQ\":\"Feeds are created by users to curate content. Choose some feeds that you find interesting.\",\"2+6lmO\":\"Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information.\",\"Qzj1WT\":\"Finding similar accounts...\",\"QKSrQV\":\"Fine-tune the content you see on your home screen.\",\"r+KeyR\":\"Fine-tune the discussion threads.\",\"MKEPCY\":\"Follow\",\"AD4dxh\":\"Follow some\",\"Wezu5M\":\"Follow some users to get started. We can recommend you more users based on who you find interesting.\",\"YY2BTA\":\"Followed users only\",\"x5LEuB\":\"Followers\",\"NIjL2Y\":\"following\",\"y6sq5j\":\"Following\",\"p3UO/y\":\"Follows you\",\"5RhDkD\":\"For security reasons, we'll need to send a confirmation code to your email address.\",\"NJPhAO\":\"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.\",\"5bDfuq\":\"Forgot\",\"hEPLrs\":\"Forgot password\",\"dn8X5t\":\"Forgot Password\",\"U+kFad\":\"Gallery\",\"c3b0B0\":\"Get Started\",\"CKyk7Q\":\"Go back\",\"sr0UJD\":\"Go Back\",\"Rtp0y7\":\"Go to next\",\"Nf7oXL\":\"Handle\",\"c3XJ18\":\"Help\",\"uX/4+/\":\"Here is your app password.\",\"vLyv1R\":\"Hide\",\"qdOx2q\":\"Hide user list\",\"i0qMbr\":\"Home\",\"sXZ8IU\":\"Home Feed Preferences\",\"yt7fhu\":\"Hosting provider\",\"s2xA6t\":\"Hosting provider address\",\"o+axy6\":\"I have a code\",\"wey2os\":\"I have my own domain\",\"WlEcKr\":\"If none are selected, suitable for all ages.\",\"VCk0rR\":\"Image alt text\",\"STGpNQ\":\"Image options\",\"6o7+En\":\"In Your Network\",\"dSKHAa\":\"Invalid username or password\",\"MFKlMB\":\"Invite\",\"F5MZVk\":\"Invite a Friend\",\"6KlkHI\":\"Invite code\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"Join the waitlist\",\"6iVTdm\":\"Join the waitlist.\",\"SNzppu\":\"Join Waitlist\",\"Dcq5kL\":\"Language selection\",\"pVhZHk\":\"Language Settings\",\"GAmD3h\":\"Languages\",\"NgeSlx\":\"Learn More\",\"rj0Lke\":\"Learn more about this warning\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"QfDITI\":\"Leaving Bluesky\",\"Esfg1M\":\"Let's get your password reset!\",\"exYcTF\":\"Library\",\"1njn7W\":\"Light\",\"BvSY1i\":\"Like this feed\",\"8/ALSr\":\"Liked by\",\"FuZWua\":\"List Avatar\",\"8mjA4F\":\"List Name\",\"h16FyT\":\"Lists\",\"ujW4FW\":\"Load more posts\",\"7EHsGr\":\"Load new notifications\",\"VkLESX\":\"Load new posts\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"Local dev server\",\"cR9UpQ\":\"Login to account that is not listed\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"Make sure this is where you intend to go!\",\"zucql+\":\"Menu\",\"DzmsLV\":\"Moderation\",\"NTIbv4\":\"Moderation lists\",\"FIJUJb\":\"More feeds\",\"3Siwmw\":\"More options\",\"Y17r45\":\"More post options\",\"RA1KUZ\":\"Mute Account\",\"du0opt\":\"Mute accounts\",\"izOxJM\":\"Mute these accounts?\",\"jq7SjD\":\"Mute thread\",\"s22grX\":\"Muted accounts\",\"qUa+lV\":\"Muted Accounts\",\"gA0D9A\":\"Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.\",\"1QJzM7\":\"Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.\",\"Mysqyf\":\"My Birthday\",\"6MBNS/\":\"My Feeds\",\"hKtWk2\":\"My Profile\",\"Ha6iBv\":\"My Saved Feeds\",\"6YtxFj\":\"Name\",\"8yolS6\":\"Never lose access to your followers and data.\",\"isRobC\":\"New\",\"2B7HLH\":\"New post\",\"FGrimz\":\"New Post\",\"hXzOVo\":\"Next\",\"EatZYJ\":\"Next image\",\"1UzENP\":\"No\",\"flmDTf\":\"No description\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"No results found for \\\"\",[\"query\"],\"\\\"\"],\"kA9DpB\":[\"No results found for \",[\"0\"]],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"Not Applicable\",\"iyUCYw\":\"Not Applicable.\",\"iDNBZe\":\"Notifications\",\"5GGAqz\":\"Oh no!\",\"UaXeX3\":\"Okay\",\"Cqo2D+\":\"One or more images is missing alt text.\",\"M/Q2aG\":\"Open navigation\",\"M5PuNq\":\"Opens configurable language settings\",\"S67TOE\":\"Opens list of invite codes\",\"eSqpax\":\"Opens modal for using custom domain\",\"vYwHHI\":\"Opens moderation settings\",\"0tHyB7\":\"Opens screen with all saved feeds\",\"nmRoY/\":\"Opens the app password settings page\",\"6e9Apv\":\"Opens the home feed preferences\",\"O87Dr/\":\"Opens the storybook page\",\"G+PVmg\":\"Opens the system log page\",\"Jqb7sy\":\"Opens the threads preferences\",\"b22AVl\":\"Other account\",\"n+HLOP\":\"Other service\",\"1PKxQ7\":\"Other...\",\"8F1i42\":\"Page not found\",\"8ZsakT\":\"Password\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"Password updated!\",\"VeZE5Q\":\"Pictures meant for adults.\",\"zgoxy5\":\"Pinned Feeds\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed.\",\"9qpQ5O\":\"Please enter a unique name for this App Password or use our randomly generated one.\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"Please enter your password as well:\",\"y28hnO\":\"Post\",\"h5RcXU\":\"Post hidden\",\"r5zLS0\":\"Post language\",\"AzCucI\":\"Post Languages\",\"tJFPmV\":\"Post not found\",\"0+DQbr\":\"Potentially Misleading Link\",\"MHk+7g\":\"Previous image\",\"HeBcM5\":\"Primary Language\",\"x8iR7V\":\"Prioritize Your Follows\",\"rjGI/Q\":\"Privacy\",\"LcET2C\":\"Privacy Policy\",\"k1ifdL\":\"Processing...\",\"vERlcd\":\"Profile\",\"MrgqOW\":\"Protect your account by verifying your email.\",\"p1UmBX\":\"Public, shareable lists which can drive feeds.\",\"8HFFRQ\":\"Quote post\",\"+KrAHa\":\"Quote Post\",\"WlWsdE\":\"Ratios\",\"WEYdDv\":\"Recommended\",\"QNzcT3\":\"Recommended Feeds\",\"41UoJb\":\"Recommended Users\",\"t/YqKh\":\"Remove\",\"p/cRzf\":[\"Remove \",[\"0\"],\" from my feeds?\"],\"1O32oy\":\"Remove account\",\"W44VX5\":\"Remove feed\",\"Yy3FzB\":\"Remove from my feeds\",\"5ywtDz\":\"Remove image\",\"Dw/XUh\":\"Remove image preview\",\"TbDEfs\":\"Remove this feed from your saved feeds?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"Reply Filters\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"bDHSjj\":\"Report Account\",\"NKmI9f\":\"Report feed\",\"6iwm2r\":\"Report List\",\"6IcSvC\":\"Report post\",\"mkude1\":\"Repost\",\"JOV5dR\":\"Repost or quote post\",\"0zb9FX\":\"Reposted by\",\"bqG37Z\":\"Request Change\",\"2d9VrZ\":\"Require alt text before posting\",\"8XIT+P\":\"Required for this provider\",\"vJgYMA\":\"Reset code\",\"xEL92I\":\"Reset onboarding state\",\"RfwZxd\":\"Reset password\",\"bee/Fw\":\"Reset preferences state\",\"wToeoz\":\"Resets the onboarding state\",\"nIU7qI\":\"Resets the preferences state\",\"6gRgw8\":\"Retry\",\"hAbYQa\":\"Retry change handle\",\"tfDRzk\":\"Save\",\"KV2YQQ\":\"Save alt text\",\"y3aU20\":\"Save changes\",\"IUwGEM\":\"Save Changes\",\"Xs07Tg\":\"Save handle change\",\"BckA7m\":\"Save image crop\",\"+K+JDj\":\"Saved Feeds\",\"A1taO8\":\"Search\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"Security Step Required\",\"cNzyJW\":\"See what's next\",\"L5sM7N\":\"Select Bluesky Social\",\"o3dwub\":\"Select from an existing account\",\"GGw2AK\":\"Select service\",\"vECNLO\":\"Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown.\",\"m5aabx\":\"Select your app language for the default text to display in the app\",\"TiiOza\":\"Select your preferred language for translations in your feed.\",\"vp9yIB\":\"Send Confirmation Email\",\"65dxv8\":\"Send email\",\"i/TzEU\":\"Send Email\",\"RoafuO\":\"Send feedback\",\"4cijjm\":\"Send Report\",\"V/e7nf\":\"Set new password\",\"gwsie4\":\"Set this setting to \\\"No\\\" to hide all quote posts from your feed. Reposts will still be visible.\",\"IZjC3J\":\"Set this setting to \\\"No\\\" to hide all replies from your feed.\",\"KIgU3l\":\"Set this setting to \\\"No\\\" to hide all reposts from your feed.\",\"zaAyrz\":\"Set this setting to \\\"Yes\\\" to show replies in a threaded view. This is an experimental feature.\",\"fQV2eE\":\"Set this setting to \\\"Yes\\\" to show samples of your saved feeds in your following feed. This is an experimental feature.\",\"Tz0i8g\":\"Settings\",\"HfWHhJ\":\"Sexual activity or erotic nudity.\",\"Z8lGw6\":\"Share\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"Share link\",\"8vETh9\":\"Show\",\"aWAdCb\":\"Show anyway\",\"NijgXr\":\"Show Posts from My Feeds\",\"T3Mt8m\":\"Show Quote Posts\",\"BlW8X/\":\"Show Replies\",\"X4GwDb\":\"Show replies by people you follow before all other replies.\",\"GiogzH\":\"Show Reposts\",\"fhY/fL\":\"Show users\",\"5lWFkC\":\"Sign in\",\"n1ekoW\":\"Sign In\",\"N9o7n5\":[\"Sign in as \",[\"0\"]],\"FT1MVS\":\"Sign in as...\",\"+UpfFC\":\"Sign into\",\"fcWrnU\":\"Sign out\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"Signed in as\",\"6Uau97\":\"Skip\",\"0o5BFH\":\"Sort Replies\",\"GH1Rgk\":\"Sort replies to the same post by:\",\"1DA6ap\":\"Square\",\"aKEHLj\":\"Staging\",\"tgEXwM\":\"Status page\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"Subscribe\",\"5z3ICN\":\"Subscribe to this list\",\"TVFyMD\":\"Suggested Follows\",\"XYLcNv\":\"Support\",\"VjWeLI\":\"Switch Account\",\"D+NlUC\":\"System\",\"fP8jTZ\":\"System log\",\"HF6Iah\":\"Tall\",\"4Y5H+g\":\"Terms\",\"xowcRf\":\"Terms of Service\",\"p8Iz39\":\"Text input field\",\"GlPXQJ\":\"The account will be able to interact with you after unblocking.\",\"o4M2MP\":\"The Community Guidelines have been moved to <0/>\",\"U42lKc\":\"The Copyright Policy has been moved to <0/>\",\"G4EksE\":\"The post may have been deleted.\",\"WNR9db\":\"The Privacy Policy has been moved to <0/>\",\"LbEbIk\":[\"The support form has been moved. If you need help, please<0/> or visit \",[\"HELP_DESK_URL\"],\" to get in touch with us.\"],\"FGbRSr\":\"The Terms of Service have been moved to\",\"yUqcy2\":\"There was an unexpected issue in the application. Please let us know if this happened to you!\",\"KRYn8w\":[\"This \",[\"screenDescription\"],\" has been flagged:\"],\"lm845B\":\"This information is not shared with other users.\",\"5Pvw/O\":\"This is important in case you ever need to change your email or reset your password.\",\"sQQfZ9\":\"This is the service that keeps you online.\",\"CvX8qs\":\"This link is taking you to the following website:\",\"WKrUVy\":\"This post has been deleted.\",\"qpCA5s\":\"This warning is only available for posts with media attached.\",\"u9ThjD\":\"Thread Preferences\",\"zmXsk5\":\"Threaded Mode\",\"1x30Qt\":\"Toggle dropdown\",\"KFXQEt\":\"Transformations\",\"pi8x/S\":\"Translate\",\"KDw4GX\":\"Try again\",\"nc4Wfd\":\"Unable to contact your service. Please check your Internet connection.\",\"tuS5Jz\":\"Unblock\",\"0VrZZv\":\"Unblock Account\",\"6pYY4t\":\"Undo repost\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"Unmute Account\",\"s12/Py\":\"Unmute thread\",\"vaz2uI\":[\"Update \",[\"displayName\"],\" in Lists\"],\"YXMY4w\":\"Update Available\",\"RXbEvi\":\"Updating...\",\"Vwkfp4\":\"Upload a text file to:\",\"jTdnU6\":\"Use app passwords to login to other Bluesky clients without giving full access to your account or password.\",\"CH1am9\":\"Use default provider\",\"ZG8UvP\":\"Use this to sign into the other app along with your handle.\",\"cKXwwI\":\"Used by:\",\"t4Yp4Z\":\"User handle\",\"8tsrUV\":\"User Lists\",\"nZx9mr\":\"Username or email address\",\"Sxm8rQ\":\"Users\",\"MBOY4U\":\"Verify email\",\"Ejyv0o\":\"Verify my email\",\"9czCrB\":\"Verify My Email\",\"ibSVGR\":\"Verify New Email\",\"nHsQde\":\"View debug entry\",\"47jzzd\":\"View the avatar\",\"wK4H1r\":\"Visit Site\",\"qjBGxf\":\"We're so excited to have you join us!\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"We're sorry! We can't find the page you were looking for.\",\"meB+tZ\":\"Welcome to <0>Bluesky\",\"Mj7rl/\":[\"What is the issue with this \",[\"collectionName\"],\"?\"],\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"I5S9ZE\":\"Wide\",\"y02THm\":\"Write post\",\"6ckZRB\":\"Write your reply\",\"l75CjT\":\"Yes\",\"STPj0e\":\"You can change hosting providers at any time.\",\"67nRLM\":\"You can now sign in with your new password.\",\"lIcbCU\":\"You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.\",\"aFZZYi\":\"You don't have any pinned feeds.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"You don't have any saved feeds.\",\"RkXibf\":\"You have blocked the author or you have been blocked by the author.\",\"tCLJ9E\":\"You have no lists.\",\"soH9qC\":\"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.\",\"NDgp3i\":\"You have not created any app passwords yet. You can create one by pressing the button below.\",\"grqdXb\":\"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.\",\"RrDyEb\":\"You will receive an email with a \\\"reset code.\\\" Enter that code here, then enter your new password.\",\"gdRnT7\":\"Your account\",\"k7hmsH\":\"Your birth date\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"Your email has been saved! We'll be in touch soon.\",\"z2L+/9\":\"Your email has been updated but not verified. As a next step, please verify your new email.\",\"XZlIVw\":\"Your email has not yet been verified. This is an important security step which we recommend.\",\"qv9f4I\":\"Your full handle will be\",\"lvcqqG\":\"Your hosting provider\",\"fbFyAZ\":\"Your invite codes are hidden when logged in using an App Password\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\",\"okRPtW\":\"Your profile\",\"MvWO9d\":\"Your user handle\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"EtUMsZ\":\". This warning is only available for posts with media attached.\",\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" List\"],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>Choose your<1>Recommended<2>Feeds\",\"F657la\":\"<0>Follow some<1>Recommended<2>Users\",\"6RmyWt\":\"<0>Here is your app password. Use this to sign into the other app along with your handle.\",\"XCTqGE\":\"A new version of the app is available. Please update to continue using the app.\",\"AnNF5e\":\"Accessibility\",\"AeXO77\":\"Account\",\"4WY4MD\":\"Account options\",\"m16xKo\":\"Add\",\"fBBX+K\":\"Add a content warning\",\"JU3hs2\":\"Add a user to this list\",\"MPPZ54\":\"Add account\",\"LkA8jz\":\"Add alt text\",\"Z8idyM\":\"Add details\",\"AoXl11\":\"Add details to report\",\"iE6B/9\":\"Add link card\",\"EXHdP1\":\"Add link card:\",\"x6laaL\":\"Add the following DNS record to your domain:\",\"UmzMP4\":\"Add to Lists\",\"hCrQ0L\":\"Add to my feeds\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"Adjust the number of likes a reply must have to be shown in your feed.\",\"qLa52r\":\"Adult Content\",\"sxkWRg\":\"Advanced\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"Alt text\",\"0QlT7/\":\"Alt text describes images for blind and low-vision users, and helps give context to everyone.\",\"woXbjq\":[\"An email has been sent to \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"Fon2dK\":[\"An email has been sent to your previous address, \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"HZFm5R\":\"and\",\"fdjKGe\":\"App Language\",\"SMmUnj\":\"App passwords\",\"8q4WlH\":\"App Passwords\",\"aAIQg2\":\"Appearance\",\"SSDZ+T\":[\"Are you sure you want to delete the app password \\\"\",[\"name\"],\"\\\"?\"],\"0BIeIs\":\"Are you sure you'd like to discard this draft?\",\"6foA8n\":\"Are you sure?\",\"/mSd6b\":\"Are you sure? This cannot be undone.\",\"EbvWd3\":\"Artistic or non-erotic nudity.\",\"iH8pgl\":\"Back\",\"ehOkF+\":\"Basics\",\"+gCI2a\":\"Birthday\",\"pieVBA\":\"Birthday:\",\"m1dqxu\":\"Block Account\",\"ffIfdM\":\"Block accounts\",\"fdYcMy\":\"Block these accounts?\",\"KWykPE\":\"Blocked accounts\",\"JuqQpF\":\"Blocked Accounts\",\"HG4qt4\":\"Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"8LNSUt\":\"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.\",\"HFCE4A\":\"Blocked post.\",\"zl+QbX\":\"Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"C50OGr\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"Camera\",\"JGGrPC\":\"Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long.\",\"dEgA5A\":\"Cancel\",\"aMH9rr\":\"Cancel account deletion\",\"kc3E4R\":\"Cancel add image alt text\",\"wg4LHQ\":\"Cancel change handle\",\"hFL1Li\":\"Cancel image crop\",\"tijH8t\":\"Cancel profile editing\",\"Qe4C/d\":\"Cancel quote post\",\"5TviPn\":\"Cancel search\",\"nss3UV\":\"Cancel waitlist signup\",\"o+XJ9D\":\"Change\",\"pQco5R\":\"Change handle\",\"Q5e1U/\":\"Change Handle\",\"a3NAfL\":\"Change my email\",\"4vatyk\":\"Change Your Email\",\"Yn3C90\":\"Check out some recommended feeds. Tap + to add them to your list of pinned feeds.\",\"ioZXIH\":\"Check out some recommended users. Follow them to see similar users.\",\"/+X+/K\":\"Check your inbox for an email with the confirmation code to enter below:\",\"Rt502e\":\"Choose Service\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"BwcLKv\":\"Choose your\",\"Wk8hkn\":\"Choose your password\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"Clear search query\",\"flH7u/\":\"Close alert\",\"hYmnbk\":\"Close bottom drawer\",\"47L1V1\":\"Close image\",\"l49ujN\":\"Close image viewer\",\"UryHFO\":\"Close navigation footer\",\"KHzDTk\":\"Community Guidelines\",\"o8UUti\":\"Compose reply\",\"7VpPHA\":\"Confirm\",\"q8upsf\":\"Confirm Change\",\"8pNKIr\":\"Confirm content language settings\",\"tGg8Kt\":\"Confirm delete account\",\"ioZOzk\":\"Confirmation code\",\"J28zul\":\"Connecting...\",\"l879p1\":\"Content filtering\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"cogwXi\":\"Content Warning\",\"FG7AQv\":\"Content warnings\",\"xGVfLh\":\"Continue\",\"6V3Ea3\":\"Copied\",\"he3ygx\":\"Copy\",\"iQgJaz\":\"Copy post text\",\"u40k/o\":\"Copyright Policy\",\"7wWvgo\":\"Could not load feed\",\"8NNr/O\":\"Could not load list\",\"mpt9T+\":\"Create a new account\",\"IS0nrP\":\"Create Account\",\"6HbhpU\":\"Create new account\",\"MXSt4t\":[\"Created \",[\"0\"]],\"GAD3Dx\":\"Custom domain\",\"ZQKLI1\":\"Danger Zone\",\"pvnfJD\":\"Dark\",\"ZDGm40\":\"Delete account\",\"vzX5FB\":\"Delete Account\",\"gUEtxf\":\"Delete app password\",\"84uE/A\":\"Delete List\",\"ktknoE\":\"Delete my account\",\"szz0+N\":\"Delete my account…\",\"04G5Az\":\"Delete post\",\"FbPNuJ\":\"Delete this post?\",\"u+1OHY\":\"Deleted post.\",\"Nu4oKW\":\"Description\",\"dacKHE\":\"Dev Server\",\"2ygkE8\":\"Developer Tools\",\"bzSI52\":\"Discard\",\"BryYJR\":\"Discard draft\",\"pbLwal\":\"Discover new feeds\",\"pfa8F0\":\"Display name\",\"0gS7M5\":\"Display Name\",\"iZ5pMB\":\"Domain verified!\",\"DPfwMq\":\"Done\",\"zT97vP\":[\"Done\",[\"extraText\"]],\"4uwlSD\":\"Each code works once. You'll receive more invite codes periodically.\",\"XQFMOm\":\"Edit image\",\"S7M0uU\":\"Edit list details\",\"cLmurE\":\"Edit My Feeds\",\"bRZ5XW\":\"Edit my profile\",\"9OpVZg\":\"Edit profile\",\"QJQd1J\":\"Edit Profile\",\"Jn7kox\":\"Edit Saved Feeds\",\"O3oNi5\":\"Email\",\"ATGYL1\":\"Email address\",\"pJJ0Vp\":\"Email Updated\",\"9Qs99X\":\"Email:\",\"96mted\":\"Enable this setting to only see replies between people you follow.\",\"YbIxza\":\"Enter the address of your provider:\",\"BfIgP6\":\"Enter the domain you want to use\",\"cHrOqs\":\"Enter the email you used to create your account. We'll send you a \\\"reset code\\\" so you can set a new password.\",\"xRPn3U\":\"Enter your email address\",\"+inPGm\":\"Enter your new email address below.\",\"T0KLp4\":\"Enter your username and password\",\"4BITzH\":\"Error:\",\"0PkE20\":\"Expand alt text\",\"/5K/KL\":\"Failed to load recommended feeds\",\"4yCy8i\":\"Feed offline\",\"N0CqyO\":\"Feed Preferences\",\"YirHq7\":\"Feedback\",\"2DoBvq\":\"Feeds\",\"I3iUBQ\":\"Feeds are created by users to curate content. Choose some feeds that you find interesting.\",\"2+6lmO\":\"Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information.\",\"Qzj1WT\":\"Finding similar accounts...\",\"QKSrQV\":\"Fine-tune the content you see on your home screen.\",\"r+KeyR\":\"Fine-tune the discussion threads.\",\"MKEPCY\":\"Follow\",\"AD4dxh\":\"Follow some\",\"Wezu5M\":\"Follow some users to get started. We can recommend you more users based on who you find interesting.\",\"YY2BTA\":\"Followed users only\",\"x5LEuB\":\"Followers\",\"NIjL2Y\":\"following\",\"y6sq5j\":\"Following\",\"p3UO/y\":\"Follows you\",\"5RhDkD\":\"For security reasons, we'll need to send a confirmation code to your email address.\",\"NJPhAO\":\"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.\",\"5bDfuq\":\"Forgot\",\"hEPLrs\":\"Forgot password\",\"dn8X5t\":\"Forgot Password\",\"U+kFad\":\"Gallery\",\"c3b0B0\":\"Get Started\",\"CKyk7Q\":\"Go back\",\"sr0UJD\":\"Go Back\",\"Rtp0y7\":\"Go to next\",\"Nf7oXL\":\"Handle\",\"c3XJ18\":\"Help\",\"uX/4+/\":\"Here is your app password.\",\"vLyv1R\":\"Hide\",\"qdOx2q\":\"Hide user list\",\"up7j9X\":\"Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.\",\"WTcLyw\":\"Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.\",\"/8MHCt\":\"Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.\",\"3zJH1g\":\"Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.\",\"yNNyhI\":\"Hmmm, we're having trouble finding this feed. It may have been deleted.\",\"i0qMbr\":\"Home\",\"sXZ8IU\":\"Home Feed Preferences\",\"yt7fhu\":\"Hosting provider\",\"s2xA6t\":\"Hosting provider address\",\"o+axy6\":\"I have a code\",\"wey2os\":\"I have my own domain\",\"WlEcKr\":\"If none are selected, suitable for all ages.\",\"VCk0rR\":\"Image alt text\",\"STGpNQ\":\"Image options\",\"6o7+En\":\"In Your Network\",\"dSKHAa\":\"Invalid username or password\",\"MFKlMB\":\"Invite\",\"F5MZVk\":\"Invite a Friend\",\"6KlkHI\":\"Invite code\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"Join the waitlist\",\"6iVTdm\":\"Join the waitlist.\",\"SNzppu\":\"Join Waitlist\",\"Dcq5kL\":\"Language selection\",\"pVhZHk\":\"Language Settings\",\"GAmD3h\":\"Languages\",\"NgeSlx\":\"Learn More\",\"rj0Lke\":\"Learn more about this warning\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"QfDITI\":\"Leaving Bluesky\",\"Esfg1M\":\"Let's get your password reset!\",\"exYcTF\":\"Library\",\"1njn7W\":\"Light\",\"BvSY1i\":\"Like this feed\",\"8/ALSr\":\"Liked by\",\"FuZWua\":\"List Avatar\",\"8mjA4F\":\"List Name\",\"h16FyT\":\"Lists\",\"ujW4FW\":\"Load more posts\",\"7EHsGr\":\"Load new notifications\",\"VkLESX\":\"Load new posts\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"Local dev server\",\"cR9UpQ\":\"Login to account that is not listed\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"Make sure this is where you intend to go!\",\"zucql+\":\"Menu\",\"DzmsLV\":\"Moderation\",\"NTIbv4\":\"Moderation lists\",\"FIJUJb\":\"More feeds\",\"3Siwmw\":\"More options\",\"Y17r45\":\"More post options\",\"RA1KUZ\":\"Mute Account\",\"du0opt\":\"Mute accounts\",\"izOxJM\":\"Mute these accounts?\",\"jq7SjD\":\"Mute thread\",\"s22grX\":\"Muted accounts\",\"qUa+lV\":\"Muted Accounts\",\"gA0D9A\":\"Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.\",\"1QJzM7\":\"Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.\",\"Mysqyf\":\"My Birthday\",\"6MBNS/\":\"My Feeds\",\"hKtWk2\":\"My Profile\",\"Ha6iBv\":\"My Saved Feeds\",\"6YtxFj\":\"Name\",\"8yolS6\":\"Never lose access to your followers and data.\",\"isRobC\":\"New\",\"2B7HLH\":\"New post\",\"FGrimz\":\"New Post\",\"hXzOVo\":\"Next\",\"EatZYJ\":\"Next image\",\"1UzENP\":\"No\",\"flmDTf\":\"No description\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"No results found for \\\"\",[\"query\"],\"\\\"\"],\"kA9DpB\":[\"No results found for \",[\"0\"]],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"Not Applicable\",\"iyUCYw\":\"Not Applicable.\",\"iDNBZe\":\"Notifications\",\"5GGAqz\":\"Oh no!\",\"UaXeX3\":\"Okay\",\"Cqo2D+\":\"One or more images is missing alt text.\",\"M/Q2aG\":\"Open navigation\",\"M5PuNq\":\"Opens configurable language settings\",\"eSqpax\":\"Opens modal for using custom domain\",\"vYwHHI\":\"Opens moderation settings\",\"0tHyB7\":\"Opens screen with all saved feeds\",\"nmRoY/\":\"Opens the app password settings page\",\"6e9Apv\":\"Opens the home feed preferences\",\"O87Dr/\":\"Opens the storybook page\",\"G+PVmg\":\"Opens the system log page\",\"Jqb7sy\":\"Opens the threads preferences\",\"b22AVl\":\"Other account\",\"n+HLOP\":\"Other service\",\"1PKxQ7\":\"Other...\",\"8F1i42\":\"Page not found\",\"8ZsakT\":\"Password\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"Password updated!\",\"VeZE5Q\":\"Pictures meant for adults.\",\"zgoxy5\":\"Pinned Feeds\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed.\",\"9qpQ5O\":\"Please enter a unique name for this App Password or use our randomly generated one.\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"Please enter your password as well:\",\"y28hnO\":\"Post\",\"h5RcXU\":\"Post hidden\",\"r5zLS0\":\"Post language\",\"AzCucI\":\"Post Languages\",\"tJFPmV\":\"Post not found\",\"0+DQbr\":\"Potentially Misleading Link\",\"MHk+7g\":\"Previous image\",\"HeBcM5\":\"Primary Language\",\"x8iR7V\":\"Prioritize Your Follows\",\"rjGI/Q\":\"Privacy\",\"LcET2C\":\"Privacy Policy\",\"k1ifdL\":\"Processing...\",\"vERlcd\":\"Profile\",\"MrgqOW\":\"Protect your account by verifying your email.\",\"p1UmBX\":\"Public, shareable lists which can drive feeds.\",\"8HFFRQ\":\"Quote post\",\"+KrAHa\":\"Quote Post\",\"WlWsdE\":\"Ratios\",\"WEYdDv\":\"Recommended\",\"QNzcT3\":\"Recommended Feeds\",\"41UoJb\":\"Recommended Users\",\"t/YqKh\":\"Remove\",\"p/cRzf\":[\"Remove \",[\"0\"],\" from my feeds?\"],\"1O32oy\":\"Remove account\",\"W44VX5\":\"Remove feed\",\"Yy3FzB\":\"Remove from my feeds\",\"5ywtDz\":\"Remove image\",\"Dw/XUh\":\"Remove image preview\",\"TbDEfs\":\"Remove this feed from your saved feeds?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"Reply Filters\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"bDHSjj\":\"Report Account\",\"NKmI9f\":\"Report feed\",\"6iwm2r\":\"Report List\",\"6IcSvC\":\"Report post\",\"mkude1\":\"Repost\",\"JOV5dR\":\"Repost or quote post\",\"0zb9FX\":\"Reposted by\",\"bqG37Z\":\"Request Change\",\"2d9VrZ\":\"Require alt text before posting\",\"8XIT+P\":\"Required for this provider\",\"vJgYMA\":\"Reset code\",\"xEL92I\":\"Reset onboarding state\",\"RfwZxd\":\"Reset password\",\"bee/Fw\":\"Reset preferences state\",\"wToeoz\":\"Resets the onboarding state\",\"nIU7qI\":\"Resets the preferences state\",\"6gRgw8\":\"Retry\",\"hAbYQa\":\"Retry change handle\",\"tfDRzk\":\"Save\",\"KV2YQQ\":\"Save alt text\",\"y3aU20\":\"Save changes\",\"IUwGEM\":\"Save Changes\",\"Xs07Tg\":\"Save handle change\",\"BckA7m\":\"Save image crop\",\"+K+JDj\":\"Saved Feeds\",\"A1taO8\":\"Search\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"Security Step Required\",\"cNzyJW\":\"See what's next\",\"L5sM7N\":\"Select Bluesky Social\",\"o3dwub\":\"Select from an existing account\",\"GGw2AK\":\"Select service\",\"vECNLO\":\"Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown.\",\"m5aabx\":\"Select your app language for the default text to display in the app\",\"TiiOza\":\"Select your preferred language for translations in your feed.\",\"vp9yIB\":\"Send Confirmation Email\",\"65dxv8\":\"Send email\",\"i/TzEU\":\"Send Email\",\"RoafuO\":\"Send feedback\",\"4cijjm\":\"Send Report\",\"V/e7nf\":\"Set new password\",\"gwsie4\":\"Set this setting to \\\"No\\\" to hide all quote posts from your feed. Reposts will still be visible.\",\"IZjC3J\":\"Set this setting to \\\"No\\\" to hide all replies from your feed.\",\"KIgU3l\":\"Set this setting to \\\"No\\\" to hide all reposts from your feed.\",\"zaAyrz\":\"Set this setting to \\\"Yes\\\" to show replies in a threaded view. This is an experimental feature.\",\"fQV2eE\":\"Set this setting to \\\"Yes\\\" to show samples of your saved feeds in your following feed. This is an experimental feature.\",\"Tz0i8g\":\"Settings\",\"HfWHhJ\":\"Sexual activity or erotic nudity.\",\"Z8lGw6\":\"Share\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"Share link\",\"8vETh9\":\"Show\",\"aWAdCb\":\"Show anyway\",\"NijgXr\":\"Show Posts from My Feeds\",\"T3Mt8m\":\"Show Quote Posts\",\"BlW8X/\":\"Show Replies\",\"X4GwDb\":\"Show replies by people you follow before all other replies.\",\"GiogzH\":\"Show Reposts\",\"fhY/fL\":\"Show users\",\"5lWFkC\":\"Sign in\",\"n1ekoW\":\"Sign In\",\"N9o7n5\":[\"Sign in as \",[\"0\"]],\"FT1MVS\":\"Sign in as...\",\"+UpfFC\":\"Sign into\",\"fcWrnU\":\"Sign out\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"Signed in as\",\"6Uau97\":\"Skip\",\"0o5BFH\":\"Sort Replies\",\"GH1Rgk\":\"Sort replies to the same post by:\",\"1DA6ap\":\"Square\",\"aKEHLj\":\"Staging\",\"tgEXwM\":\"Status page\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"Subscribe\",\"5z3ICN\":\"Subscribe to this list\",\"TVFyMD\":\"Suggested Follows\",\"XYLcNv\":\"Support\",\"VjWeLI\":\"Switch Account\",\"D+NlUC\":\"System\",\"fP8jTZ\":\"System log\",\"HF6Iah\":\"Tall\",\"4Y5H+g\":\"Terms\",\"xowcRf\":\"Terms of Service\",\"p8Iz39\":\"Text input field\",\"GlPXQJ\":\"The account will be able to interact with you after unblocking.\",\"o4M2MP\":\"The Community Guidelines have been moved to <0/>\",\"U42lKc\":\"The Copyright Policy has been moved to <0/>\",\"G4EksE\":\"The post may have been deleted.\",\"WNR9db\":\"The Privacy Policy has been moved to <0/>\",\"LbEbIk\":[\"The support form has been moved. If you need help, please<0/> or visit \",[\"HELP_DESK_URL\"],\" to get in touch with us.\"],\"FGbRSr\":\"The Terms of Service have been moved to\",\"yUqcy2\":\"There was an unexpected issue in the application. Please let us know if this happened to you!\",\"KRYn8w\":[\"This \",[\"screenDescription\"],\" has been flagged:\"],\"lm845B\":\"This information is not shared with other users.\",\"5Pvw/O\":\"This is important in case you ever need to change your email or reset your password.\",\"sQQfZ9\":\"This is the service that keeps you online.\",\"CvX8qs\":\"This link is taking you to the following website:\",\"WKrUVy\":\"This post has been deleted.\",\"qpCA5s\":\"This warning is only available for posts with media attached.\",\"u9ThjD\":\"Thread Preferences\",\"zmXsk5\":\"Threaded Mode\",\"1x30Qt\":\"Toggle dropdown\",\"KFXQEt\":\"Transformations\",\"pi8x/S\":\"Translate\",\"KDw4GX\":\"Try again\",\"nc4Wfd\":\"Unable to contact your service. Please check your Internet connection.\",\"tuS5Jz\":\"Unblock\",\"0VrZZv\":\"Unblock Account\",\"6pYY4t\":\"Undo repost\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"Unmute Account\",\"s12/Py\":\"Unmute thread\",\"vaz2uI\":[\"Update \",[\"displayName\"],\" in Lists\"],\"YXMY4w\":\"Update Available\",\"RXbEvi\":\"Updating...\",\"Vwkfp4\":\"Upload a text file to:\",\"jTdnU6\":\"Use app passwords to login to other Bluesky clients without giving full access to your account or password.\",\"CH1am9\":\"Use default provider\",\"ZG8UvP\":\"Use this to sign into the other app along with your handle.\",\"cKXwwI\":\"Used by:\",\"t4Yp4Z\":\"User handle\",\"8tsrUV\":\"User Lists\",\"nZx9mr\":\"Username or email address\",\"Sxm8rQ\":\"Users\",\"MBOY4U\":\"Verify email\",\"Ejyv0o\":\"Verify my email\",\"9czCrB\":\"Verify My Email\",\"ibSVGR\":\"Verify New Email\",\"nHsQde\":\"View debug entry\",\"47jzzd\":\"View the avatar\",\"wK4H1r\":\"Visit Site\",\"qjBGxf\":\"We're so excited to have you join us!\",\"1xpRAp\":\"We're sorry, but this content is not viewable without a Bluesky account.\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"We're sorry! We can't find the page you were looking for.\",\"meB+tZ\":\"Welcome to <0>Bluesky\",\"Mj7rl/\":[\"What is the issue with this \",[\"collectionName\"],\"?\"],\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"I5S9ZE\":\"Wide\",\"y02THm\":\"Write post\",\"6ckZRB\":\"Write your reply\",\"l75CjT\":\"Yes\",\"STPj0e\":\"You can change hosting providers at any time.\",\"67nRLM\":\"You can now sign in with your new password.\",\"lIcbCU\":\"You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.\",\"aFZZYi\":\"You don't have any pinned feeds.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"You don't have any saved feeds.\",\"RkXibf\":\"You have blocked the author or you have been blocked by the author.\",\"tCLJ9E\":\"You have no lists.\",\"soH9qC\":\"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.\",\"NDgp3i\":\"You have not created any app passwords yet. You can create one by pressing the button below.\",\"grqdXb\":\"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.\",\"RrDyEb\":\"You will receive an email with a \\\"reset code.\\\" Enter that code here, then enter your new password.\",\"gdRnT7\":\"Your account\",\"k7hmsH\":\"Your birth date\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"Your email has been saved! We'll be in touch soon.\",\"z2L+/9\":\"Your email has been updated but not verified. As a next step, please verify your new email.\",\"XZlIVw\":\"Your email has not yet been verified. This is an important security step which we recommend.\",\"qv9f4I\":\"Your full handle will be\",\"lvcqqG\":\"Your hosting provider\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\",\"okRPtW\":\"Your profile\",\"MvWO9d\":\"Your user handle\"}")}; \ No newline at end of file diff --git a/src/locale/locales/en/messages.po b/src/locale/locales/en/messages.po index 473701e7..9289471f 100644 --- a/src/locale/locales/en/messages.po +++ b/src/locale/locales/en/messages.po @@ -21,12 +21,6 @@ msgstr "" #~ msgid ". This warning is only available for posts with media attached." #~ msgstr "" -#: src/view/screens/Settings.tsx:410 -#: src/view/shell/desktop/RightNav.tsx:158 -#: src/view/shell/Drawer.tsx:527 -msgid "{0, plural, one {# invite code available} other {# invite codes available}}" -msgstr "" - #: src/view/com/modals/Repost.tsx:44 msgid "{0}" msgstr "" @@ -35,11 +29,6 @@ msgstr "" msgid "{0} {purposeLabel} List" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:141 -#: src/view/shell/Drawer.tsx:504 -msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" -msgstr "" - #: src/view/screens/Search/Search.tsx:86 msgid "{message}" msgstr "" @@ -61,12 +50,12 @@ msgid "A new version of the app is available. Please update to continue using th msgstr "" #: src/view/com/modals/EditImage.tsx:299 -#: src/view/screens/Settings.tsx:422 +#: src/view/screens/Settings.tsx:410 msgid "Accessibility" msgstr "" #: src/view/com/auth/login/LoginForm.tsx:161 -#: src/view/screens/Settings.tsx:289 +#: src/view/screens/Settings.tsx:288 msgid "Account" msgstr "" @@ -88,8 +77,8 @@ msgstr "" msgid "Add a user to this list" msgstr "" -#: src/view/screens/Settings.tsx:358 -#: src/view/screens/Settings.tsx:367 +#: src/view/screens/Settings.tsx:357 +#: src/view/screens/Settings.tsx:366 msgid "Add account" msgstr "" @@ -140,7 +129,7 @@ msgstr "" msgid "Adult Content" msgstr "" -#: src/view/screens/Settings.tsx:574 +#: src/view/screens/Settings.tsx:562 msgid "Advanced" msgstr "" @@ -172,7 +161,7 @@ msgstr "" msgid "App Language" msgstr "" -#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:582 msgid "App passwords" msgstr "" @@ -180,7 +169,7 @@ msgstr "" msgid "App Passwords" msgstr "" -#: src/view/screens/Settings.tsx:437 +#: src/view/screens/Settings.tsx:425 msgid "Appearance" msgstr "" @@ -205,7 +194,7 @@ msgid "Artistic or non-erotic nudity." msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:145 -#: src/view/com/auth/login/ChooseAccountForm.tsx:122 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 #: src/view/com/auth/login/LoginForm.tsx:251 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 @@ -217,7 +206,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/view/screens/Settings.tsx:466 +#: src/view/screens/Settings.tsx:454 msgid "Basics" msgstr "" @@ -226,7 +215,7 @@ msgstr "" msgid "Birthday" msgstr "" -#: src/view/screens/Settings.tsx:315 +#: src/view/screens/Settings.tsx:314 msgid "Birthday:" msgstr "" @@ -291,7 +280,7 @@ msgstr "" msgid "Bluesky.Social" msgstr "" -#: src/view/screens/Settings.tsx:723 +#: src/view/screens/Settings.tsx:711 msgid "Build version {0} {1}" msgstr "" @@ -359,12 +348,12 @@ msgstr "" msgid "Cancel waitlist signup" msgstr "" -#: src/view/screens/Settings.tsx:309 +#: src/view/screens/Settings.tsx:308 msgid "Change" msgstr "" -#: src/view/screens/Settings.tsx:606 -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:603 msgid "Change handle" msgstr "" @@ -408,19 +397,19 @@ msgstr "" msgid "Choose your password" msgstr "" -#: src/view/screens/Settings.tsx:699 +#: src/view/screens/Settings.tsx:687 msgid "Clear all legacy storage data" msgstr "" -#: src/view/screens/Settings.tsx:701 +#: src/view/screens/Settings.tsx:689 msgid "Clear all legacy storage data (restart after this)" msgstr "" -#: src/view/screens/Settings.tsx:711 +#: src/view/screens/Settings.tsx:699 msgid "Clear all storage data" msgstr "" -#: src/view/screens/Settings.tsx:713 +#: src/view/screens/Settings.tsx:701 msgid "Clear all storage data (restart after this)" msgstr "" @@ -561,7 +550,7 @@ msgstr "" msgid "Custom domain" msgstr "" -#: src/view/screens/Settings.tsx:620 +#: src/view/screens/Settings.tsx:608 msgid "Danger Zone" msgstr "" @@ -569,7 +558,7 @@ msgstr "" #~ msgid "Dark" #~ msgstr "" -#: src/view/screens/Settings.tsx:627 +#: src/view/screens/Settings.tsx:615 msgid "Delete account" msgstr "" @@ -591,7 +580,7 @@ msgstr "" msgid "Delete my account" msgstr "" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:625 msgid "Delete my account…" msgstr "" @@ -618,7 +607,7 @@ msgstr "" msgid "Dev Server" msgstr "" -#: src/view/screens/Settings.tsx:642 +#: src/view/screens/Settings.tsx:630 msgid "Developer Tools" msgstr "" @@ -677,7 +666,7 @@ msgid "Edit list details" msgstr "" #: src/view/screens/Feeds.tsx:367 -#: src/view/screens/SavedFeeds.tsx:75 +#: src/view/screens/SavedFeeds.tsx:85 msgid "Edit My Feeds" msgstr "" @@ -712,7 +701,7 @@ msgstr "" msgid "Email Updated" msgstr "" -#: src/view/screens/Settings.tsx:293 +#: src/view/screens/Settings.tsx:292 msgid "Email:" msgstr "" @@ -757,7 +746,7 @@ msgstr "" msgid "Failed to load recommended feeds" msgstr "" -#: src/view/screens/Feeds.tsx:558 +#: src/view/screens/Feeds.tsx:559 msgid "Feed offline" msgstr "" @@ -765,12 +754,12 @@ msgstr "" msgid "Feed Preferences" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:64 +#: src/view/shell/desktop/RightNav.tsx:65 #: src/view/shell/Drawer.tsx:411 msgid "Feedback" msgstr "" -#: src/view/screens/Feeds.tsx:474 +#: src/view/screens/Feeds.tsx:475 #: src/view/shell/bottom-bar/BottomBar.tsx:169 #: src/view/shell/desktop/LeftNav.tsx:342 #: src/view/shell/Drawer.tsx:328 @@ -782,7 +771,7 @@ msgstr "" msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." msgstr "" -#: src/view/screens/SavedFeeds.tsx:132 +#: src/view/screens/SavedFeeds.tsx:156 msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." msgstr "" @@ -884,7 +873,7 @@ msgstr "" msgid "Handle" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:93 +#: src/view/shell/desktop/RightNav.tsx:94 #: src/view/shell/Drawer.tsx:421 msgid "Help" msgstr "" @@ -901,6 +890,26 @@ msgstr "" msgid "Hide user list" msgstr "" +#: src/view/com/posts/FeedErrorMessage.tsx:101 +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:89 +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:95 +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:92 +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:86 +msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +msgstr "" + #: src/view/shell/bottom-bar/BottomBar.tsx:125 #: src/view/shell/desktop/LeftNav.tsx:306 #: src/view/shell/Drawer.tsx:275 @@ -908,9 +917,9 @@ msgstr "" msgid "Home" msgstr "" -#: src/view/com/pager/FeedsTabBarMobile.tsx:71 +#: src/view/com/pager/FeedsTabBarMobile.tsx:99 #: src/view/screens/PreferencesHomeFeed.tsx:95 -#: src/view/screens/Settings.tsx:486 +#: src/view/screens/Settings.tsx:474 msgid "Home Feed Preferences" msgstr "" @@ -953,12 +962,12 @@ msgstr "" msgid "Invalid username or password" msgstr "" -#: src/view/screens/Settings.tsx:386 +#: src/view/screens/Settings.tsx:385 msgid "Invite" msgstr "" #: src/view/com/modals/InviteCodes.tsx:91 -#: src/view/screens/Settings.tsx:374 +#: src/view/screens/Settings.tsx:373 msgid "Invite a Friend" msgstr "" @@ -991,7 +1000,7 @@ msgstr "" msgid "Language Settings" msgstr "" -#: src/view/screens/Settings.tsx:546 +#: src/view/screens/Settings.tsx:534 msgid "Languages" msgstr "" @@ -1031,7 +1040,7 @@ msgstr "" #~ msgid "Light" #~ msgstr "" -#: src/view/screens/ProfileFeed.tsx:625 +#: src/view/screens/ProfileFeed.tsx:626 msgid "Like this feed" msgstr "" @@ -1059,7 +1068,7 @@ msgstr "" msgid "Load more posts" msgstr "" -#: src/view/screens/Notifications.tsx:120 +#: src/view/screens/Notifications.tsx:130 msgid "Load new notifications" msgstr "" @@ -1075,11 +1084,11 @@ msgstr "" msgid "Local dev server" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:104 +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 msgid "Login to account that is not listed" msgstr "" -#: src/view/screens/ProfileFeed.tsx:477 +#: src/view/screens/ProfileFeed.tsx:478 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 "" @@ -1092,7 +1101,7 @@ msgid "Menu" msgstr "" #: src/view/screens/Moderation.tsx:51 -#: src/view/screens/Settings.tsx:568 +#: src/view/screens/Settings.tsx:556 #: src/view/shell/desktop/LeftNav.tsx:400 #: src/view/shell/Drawer.tsx:346 #: src/view/shell/Drawer.tsx:347 @@ -1108,7 +1117,7 @@ msgid "More feeds" msgstr "" #: src/view/com/profile/ProfileHeader.tsx:506 -#: src/view/screens/ProfileFeed.tsx:367 +#: src/view/screens/ProfileFeed.tsx:368 #: src/view/screens/ProfileList.tsx:506 msgid "More options" msgstr "" @@ -1161,7 +1170,7 @@ msgstr "" msgid "My Profile" msgstr "" -#: src/view/screens/Settings.tsx:525 +#: src/view/screens/Settings.tsx:513 msgid "My Saved Feeds" msgstr "" @@ -1179,9 +1188,9 @@ msgid "New" msgstr "" #: src/view/com/feeds/FeedPage.tsx:187 -#: src/view/screens/Feeds.tsx:509 -#: src/view/screens/Profile.tsx:380 -#: src/view/screens/ProfileFeed.tsx:447 +#: src/view/screens/Feeds.tsx:510 +#: src/view/screens/Profile.tsx:381 +#: src/view/screens/ProfileFeed.tsx:448 #: src/view/screens/ProfileList.tsx:199 #: src/view/screens/ProfileList.tsx:231 #: src/view/shell/desktop/LeftNav.tsx:255 @@ -1212,7 +1221,7 @@ msgstr "" msgid "No" msgstr "" -#: src/view/screens/ProfileFeed.tsx:618 +#: src/view/screens/ProfileFeed.tsx:619 #: src/view/screens/ProfileList.tsx:632 msgid "No description" msgstr "" @@ -1221,7 +1230,7 @@ msgstr "" msgid "No result" msgstr "" -#: src/view/screens/Feeds.tsx:451 +#: src/view/screens/Feeds.tsx:452 msgid "No results found for \"{query}\"" msgstr "" @@ -1246,8 +1255,8 @@ msgstr "" msgid "Not Applicable." msgstr "" -#: src/view/screens/Notifications.tsx:87 -#: src/view/screens/Notifications.tsx:111 +#: src/view/screens/Notifications.tsx:97 +#: src/view/screens/Notifications.tsx:121 #: src/view/shell/bottom-bar/BottomBar.tsx:196 #: src/view/shell/desktop/LeftNav.tsx:364 #: src/view/shell/Drawer.tsx:299 @@ -1267,52 +1276,47 @@ msgstr "" msgid "One or more images is missing alt text." msgstr "" -#: src/view/com/pager/FeedsTabBarMobile.tsx:51 +#: src/view/com/pager/FeedsTabBarMobile.tsx:79 msgid "Open navigation" msgstr "" -#: src/view/screens/Settings.tsx:538 +#: src/view/screens/Settings.tsx:526 msgid "Opens configurable language settings" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:146 -#: src/view/shell/Drawer.tsx:509 -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:563 +#: src/view/screens/Settings.tsx:551 msgid "Opens moderation settings" msgstr "" -#: src/view/screens/Settings.tsx:519 +#: src/view/screens/Settings.tsx:507 msgid "Opens screen with all saved feeds" msgstr "" -#: src/view/screens/Settings.tsx:586 +#: src/view/screens/Settings.tsx:574 msgid "Opens the app password settings page" msgstr "" -#: src/view/screens/Settings.tsx:478 +#: src/view/screens/Settings.tsx:466 msgid "Opens the home feed preferences" msgstr "" -#: src/view/screens/Settings.tsx:669 +#: src/view/screens/Settings.tsx:657 msgid "Opens the storybook page" msgstr "" -#: src/view/screens/Settings.tsx:649 +#: src/view/screens/Settings.tsx:637 msgid "Opens the system log page" msgstr "" -#: src/view/screens/Settings.tsx:499 +#: src/view/screens/Settings.tsx:487 msgid "Opens the threads preferences" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:109 +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" msgstr "" @@ -1349,7 +1353,7 @@ msgstr "" msgid "Pictures meant for adults." msgstr "" -#: src/view/screens/SavedFeeds.tsx:79 +#: src/view/screens/SavedFeeds.tsx:89 msgid "Pinned Feeds" msgstr "" @@ -1415,7 +1419,7 @@ msgstr "" msgid "Prioritize Your Follows" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:75 +#: src/view/shell/desktop/RightNav.tsx:76 msgid "Privacy" msgstr "" @@ -1434,7 +1438,7 @@ msgstr "" msgid "Profile" msgstr "" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:782 msgid "Protect your account by verifying your email." msgstr "" @@ -1476,7 +1480,7 @@ msgstr "" msgid "Remove" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:92 +#: src/view/com/feeds/FeedSourceCard.tsx:108 msgid "Remove {0} from my feeds?" msgstr "" @@ -1484,11 +1488,11 @@ msgstr "" msgid "Remove account" msgstr "" -#: src/view/com/posts/FeedErrorMessage.tsx:106 +#: src/view/com/posts/FeedErrorMessage.tsx:118 msgid "Remove feed" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:91 +#: src/view/com/feeds/FeedSourceCard.tsx:107 #: src/view/screens/ProfileFeed.tsx:278 msgid "Remove from my feeds" msgstr "" @@ -1501,7 +1505,7 @@ msgstr "" msgid "Remove image preview" msgstr "" -#: src/view/com/posts/FeedErrorMessage.tsx:107 +#: src/view/com/posts/FeedErrorMessage.tsx:119 msgid "Remove this feed from your saved feeds?" msgstr "" @@ -1565,7 +1569,7 @@ msgstr "" msgid "Reset code" msgstr "" -#: src/view/screens/Settings.tsx:691 +#: src/view/screens/Settings.tsx:679 msgid "Reset onboarding state" msgstr "" @@ -1573,15 +1577,15 @@ msgstr "" msgid "Reset password" msgstr "" -#: src/view/screens/Settings.tsx:681 +#: src/view/screens/Settings.tsx:669 msgid "Reset preferences state" msgstr "" -#: src/view/screens/Settings.tsx:689 +#: src/view/screens/Settings.tsx:677 msgid "Resets the onboarding state" msgstr "" -#: src/view/screens/Settings.tsx:679 +#: src/view/screens/Settings.tsx:667 msgid "Resets the preferences state" msgstr "" @@ -1628,7 +1632,7 @@ msgstr "" msgid "Save image crop" msgstr "" -#: src/view/screens/SavedFeeds.tsx:105 +#: src/view/screens/SavedFeeds.tsx:122 msgid "Saved Feeds" msgstr "" @@ -1726,7 +1730,7 @@ msgstr "" 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:280 +#: src/view/screens/Settings.tsx:279 #: src/view/shell/desktop/LeftNav.tsx:436 #: src/view/shell/Drawer.tsx:380 #: src/view/shell/Drawer.tsx:381 @@ -1751,7 +1755,7 @@ msgstr "" #~ msgid "Share link" #~ msgstr "" -#: src/view/screens/Settings.tsx:319 +#: src/view/screens/Settings.tsx:318 msgid "Show" msgstr "" @@ -1795,11 +1799,11 @@ msgstr "" msgid "Sign In" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:37 +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 msgid "Sign in as {0}" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:94 +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 #: src/view/com/auth/login/Login.tsx:100 msgid "Sign in as..." msgstr "" @@ -1823,7 +1827,7 @@ msgstr "" msgid "Sign up or sign in to join the conversation" msgstr "" -#: src/view/screens/Settings.tsx:330 +#: src/view/screens/Settings.tsx:329 msgid "Signed in as" msgstr "" @@ -1848,11 +1852,11 @@ msgstr "" msgid "Staging" msgstr "" -#: src/view/screens/Settings.tsx:735 +#: src/view/screens/Settings.tsx:723 msgid "Status page" msgstr "" -#: src/view/screens/Settings.tsx:671 +#: src/view/screens/Settings.tsx:659 msgid "Storybook" msgstr "" @@ -1881,7 +1885,7 @@ msgstr "" #~ msgid "System" #~ msgstr "" -#: src/view/screens/Settings.tsx:651 +#: src/view/screens/Settings.tsx:639 msgid "System log" msgstr "" @@ -1889,7 +1893,7 @@ msgstr "" msgid "Tall" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:84 +#: src/view/shell/desktop/RightNav.tsx:85 msgid "Terms" msgstr "" @@ -1962,7 +1966,7 @@ msgid "This warning is only available for posts with media attached." msgstr "" #: src/view/screens/PreferencesThreads.tsx:53 -#: src/view/screens/Settings.tsx:508 +#: src/view/screens/Settings.tsx:496 msgid "Thread Preferences" msgstr "" @@ -2069,15 +2073,15 @@ msgstr "" msgid "Users" msgstr "" -#: src/view/screens/Settings.tsx:755 +#: src/view/screens/Settings.tsx:743 msgid "Verify email" msgstr "" -#: src/view/screens/Settings.tsx:780 +#: src/view/screens/Settings.tsx:768 msgid "Verify my email" msgstr "" -#: src/view/screens/Settings.tsx:789 +#: src/view/screens/Settings.tsx:777 msgid "Verify My Email" msgstr "" @@ -2102,6 +2106,10 @@ msgstr "" msgid "We're so excited to have you join us!" msgstr "" +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "We're sorry, but this content is not viewable without a Bluesky account." +msgstr "" + #: src/view/screens/Search/Search.tsx:236 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" @@ -2157,7 +2165,7 @@ msgstr "" 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:92 +#: src/view/screens/SavedFeeds.tsx:102 msgid "You don't have any pinned feeds." msgstr "" @@ -2165,7 +2173,7 @@ msgstr "" msgid "You don't have any saved feeds!" msgstr "" -#: src/view/screens/SavedFeeds.tsx:118 +#: src/view/screens/SavedFeeds.tsx:135 msgid "You don't have any saved feeds." msgstr "" @@ -2228,12 +2236,6 @@ msgstr "" msgid "Your hosting provider" msgstr "" -#: src/view/screens/Settings.tsx:405 -#: src/view/shell/desktop/RightNav.tsx:127 -#: src/view/shell/Drawer.tsx:523 -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 "" diff --git a/src/locale/locales/es/messages.js b/src/locale/locales/es/messages.js index 3b56d1f1..93651032 100644 --- a/src/locale/locales/es/messages.js +++ b/src/locale/locales/es/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"EtUMsZ\":\". This warning is only available for posts with media attached.\",\"ebOBhv\":[[\"0\",\"plural\",{\"one\":[\"#\",\" invite code available\"],\"other\":[\"#\",\" invite codes available\"]}]],\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" List\"],\"zgN03j\":[[\"invitesAvailable\",\"plural\",{\"one\":[\"Invite codes: \",\"#\",\" available\"],\"other\":[\"Invite codes: \",\"#\",\" available\"]}]],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>Choose your<1>Recommended<2>Feeds\",\"F657la\":\"<0>Follow some<1>Recommended<2>Users\",\"6RmyWt\":\"<0>Here is your app password. Use this to sign into the other app along with your handle.\",\"XCTqGE\":\"A new version of the app is available. Please update to continue using the app.\",\"AnNF5e\":\"Accessibility\",\"AeXO77\":\"Account\",\"4WY4MD\":\"Account options\",\"m16xKo\":\"Add\",\"fBBX+K\":\"Add a content warning\",\"JU3hs2\":\"Add a user to this list\",\"MPPZ54\":\"Add account\",\"LkA8jz\":\"Add alt text\",\"Z8idyM\":\"Add details\",\"AoXl11\":\"Add details to report\",\"iE6B/9\":\"Add link card\",\"EXHdP1\":\"Add link card:\",\"x6laaL\":\"Add the following DNS record to your domain:\",\"UmzMP4\":\"Add to Lists\",\"hCrQ0L\":\"Add to my feeds\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"Adjust the number of likes a reply must have to be shown in your feed.\",\"qLa52r\":\"Adult Content\",\"sxkWRg\":\"Advanced\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"Alt text\",\"0QlT7/\":\"Alt text describes images for blind and low-vision users, and helps give context to everyone.\",\"woXbjq\":[\"An email has been sent to \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"Fon2dK\":[\"An email has been sent to your previous address, \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"HZFm5R\":\"and\",\"fdjKGe\":\"App Language\",\"SMmUnj\":\"App passwords\",\"8q4WlH\":\"App Passwords\",\"aAIQg2\":\"Appearance\",\"SSDZ+T\":[\"Are you sure you want to delete the app password \\\"\",[\"name\"],\"\\\"?\"],\"0BIeIs\":\"Are you sure you'd like to discard this draft?\",\"6foA8n\":\"Are you sure?\",\"/mSd6b\":\"Are you sure? This cannot be undone.\",\"EbvWd3\":\"Artistic or non-erotic nudity.\",\"iH8pgl\":\"Back\",\"ehOkF+\":\"Basics\",\"+gCI2a\":\"Birthday\",\"pieVBA\":\"Birthday:\",\"m1dqxu\":\"Block Account\",\"ffIfdM\":\"Block accounts\",\"fdYcMy\":\"Block these accounts?\",\"KWykPE\":\"Blocked accounts\",\"JuqQpF\":\"Blocked Accounts\",\"HG4qt4\":\"Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"8LNSUt\":\"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.\",\"HFCE4A\":\"Blocked post.\",\"zl+QbX\":\"Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"C50OGr\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"Camera\",\"JGGrPC\":\"Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long.\",\"dEgA5A\":\"Cancel\",\"aMH9rr\":\"Cancel account deletion\",\"kc3E4R\":\"Cancel add image alt text\",\"wg4LHQ\":\"Cancel change handle\",\"hFL1Li\":\"Cancel image crop\",\"tijH8t\":\"Cancel profile editing\",\"Qe4C/d\":\"Cancel quote post\",\"5TviPn\":\"Cancel search\",\"nss3UV\":\"Cancel waitlist signup\",\"o+XJ9D\":\"Change\",\"pQco5R\":\"Change handle\",\"Q5e1U/\":\"Change Handle\",\"a3NAfL\":\"Change my email\",\"4vatyk\":\"Change Your Email\",\"Yn3C90\":\"Check out some recommended feeds. Tap + to add them to your list of pinned feeds.\",\"ioZXIH\":\"Check out some recommended users. Follow them to see similar users.\",\"/+X+/K\":\"Check your inbox for an email with the confirmation code to enter below:\",\"Rt502e\":\"Choose Service\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"BwcLKv\":\"Choose your\",\"Wk8hkn\":\"Choose your password\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"Clear search query\",\"flH7u/\":\"Close alert\",\"hYmnbk\":\"Close bottom drawer\",\"47L1V1\":\"Close image\",\"l49ujN\":\"Close image viewer\",\"UryHFO\":\"Close navigation footer\",\"KHzDTk\":\"Community Guidelines\",\"o8UUti\":\"Compose reply\",\"7VpPHA\":\"Confirm\",\"q8upsf\":\"Confirm Change\",\"8pNKIr\":\"Confirm content language settings\",\"tGg8Kt\":\"Confirm delete account\",\"ioZOzk\":\"Confirmation code\",\"J28zul\":\"Connecting...\",\"l879p1\":\"Content filtering\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"cogwXi\":\"Content Warning\",\"FG7AQv\":\"Content warnings\",\"xGVfLh\":\"Continue\",\"6V3Ea3\":\"Copied\",\"he3ygx\":\"Copy\",\"iQgJaz\":\"Copy post text\",\"u40k/o\":\"Copyright Policy\",\"7wWvgo\":\"Could not load feed\",\"8NNr/O\":\"Could not load list\",\"mpt9T+\":\"Create a new account\",\"IS0nrP\":\"Create Account\",\"6HbhpU\":\"Create new account\",\"MXSt4t\":[\"Created \",[\"0\"]],\"GAD3Dx\":\"Custom domain\",\"ZQKLI1\":\"Danger Zone\",\"pvnfJD\":\"Dark\",\"ZDGm40\":\"Delete account\",\"vzX5FB\":\"Delete Account\",\"gUEtxf\":\"Delete app password\",\"84uE/A\":\"Delete List\",\"ktknoE\":\"Delete my account\",\"szz0+N\":\"Delete my account…\",\"04G5Az\":\"Delete post\",\"FbPNuJ\":\"Delete this post?\",\"u+1OHY\":\"Deleted post.\",\"Nu4oKW\":\"Description\",\"dacKHE\":\"Dev Server\",\"2ygkE8\":\"Developer Tools\",\"bzSI52\":\"Discard\",\"BryYJR\":\"Discard draft\",\"pbLwal\":\"Discover new feeds\",\"pfa8F0\":\"Display name\",\"0gS7M5\":\"Display Name\",\"iZ5pMB\":\"Domain verified!\",\"DPfwMq\":\"Done\",\"zT97vP\":[\"Done\",[\"extraText\"]],\"4uwlSD\":\"Each code works once. You'll receive more invite codes periodically.\",\"XQFMOm\":\"Edit image\",\"S7M0uU\":\"Edit list details\",\"cLmurE\":\"Edit My Feeds\",\"bRZ5XW\":\"Edit my profile\",\"9OpVZg\":\"Edit profile\",\"QJQd1J\":\"Edit Profile\",\"Jn7kox\":\"Edit Saved Feeds\",\"O3oNi5\":\"Email\",\"ATGYL1\":\"Email address\",\"pJJ0Vp\":\"Email Updated\",\"9Qs99X\":\"Email:\",\"96mted\":\"Enable this setting to only see replies between people you follow.\",\"YbIxza\":\"Enter the address of your provider:\",\"BfIgP6\":\"Enter the domain you want to use\",\"cHrOqs\":\"Enter the email you used to create your account. We'll send you a \\\"reset code\\\" so you can set a new password.\",\"xRPn3U\":\"Enter your email address\",\"+inPGm\":\"Enter your new email address below.\",\"T0KLp4\":\"Enter your username and password\",\"4BITzH\":\"Error:\",\"0PkE20\":\"Expand alt text\",\"/5K/KL\":\"Failed to load recommended feeds\",\"4yCy8i\":\"Feed offline\",\"N0CqyO\":\"Feed Preferences\",\"YirHq7\":\"Feedback\",\"2DoBvq\":\"Feeds\",\"I3iUBQ\":\"Feeds are created by users to curate content. Choose some feeds that you find interesting.\",\"2+6lmO\":\"Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information.\",\"Qzj1WT\":\"Finding similar accounts...\",\"QKSrQV\":\"Fine-tune the content you see on your home screen.\",\"r+KeyR\":\"Fine-tune the discussion threads.\",\"MKEPCY\":\"Follow\",\"AD4dxh\":\"Follow some\",\"Wezu5M\":\"Follow some users to get started. We can recommend you more users based on who you find interesting.\",\"YY2BTA\":\"Followed users only\",\"x5LEuB\":\"Followers\",\"NIjL2Y\":\"following\",\"y6sq5j\":\"Following\",\"p3UO/y\":\"Follows you\",\"5RhDkD\":\"For security reasons, we'll need to send a confirmation code to your email address.\",\"NJPhAO\":\"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.\",\"5bDfuq\":\"Forgot\",\"hEPLrs\":\"Forgot password\",\"dn8X5t\":\"Forgot Password\",\"U+kFad\":\"Gallery\",\"c3b0B0\":\"Get Started\",\"CKyk7Q\":\"Go back\",\"sr0UJD\":\"Go Back\",\"Rtp0y7\":\"Go to next\",\"Nf7oXL\":\"Handle\",\"c3XJ18\":\"Help\",\"uX/4+/\":\"Here is your app password.\",\"vLyv1R\":\"Hide\",\"qdOx2q\":\"Hide user list\",\"i0qMbr\":\"Home\",\"sXZ8IU\":\"Home Feed Preferences\",\"yt7fhu\":\"Hosting provider\",\"s2xA6t\":\"Hosting provider address\",\"o+axy6\":\"I have a code\",\"wey2os\":\"I have my own domain\",\"WlEcKr\":\"If none are selected, suitable for all ages.\",\"VCk0rR\":\"Image alt text\",\"STGpNQ\":\"Image options\",\"6o7+En\":\"In Your Network\",\"dSKHAa\":\"Invalid username or password\",\"MFKlMB\":\"Invite\",\"F5MZVk\":\"Invite a Friend\",\"6KlkHI\":\"Invite code\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"Join the waitlist\",\"6iVTdm\":\"Join the waitlist.\",\"SNzppu\":\"Join Waitlist\",\"Dcq5kL\":\"Language selection\",\"pVhZHk\":\"Language Settings\",\"GAmD3h\":\"Languages\",\"NgeSlx\":\"Learn More\",\"rj0Lke\":\"Learn more about this warning\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"QfDITI\":\"Leaving Bluesky\",\"Esfg1M\":\"Let's get your password reset!\",\"exYcTF\":\"Library\",\"1njn7W\":\"Light\",\"BvSY1i\":\"Like this feed\",\"8/ALSr\":\"Liked by\",\"FuZWua\":\"List Avatar\",\"8mjA4F\":\"List Name\",\"h16FyT\":\"Lists\",\"ujW4FW\":\"Load more posts\",\"7EHsGr\":\"Load new notifications\",\"VkLESX\":\"Load new posts\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"Local dev server\",\"cR9UpQ\":\"Login to account that is not listed\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"Make sure this is where you intend to go!\",\"zucql+\":\"Menu\",\"DzmsLV\":\"Moderation\",\"NTIbv4\":\"Moderation lists\",\"FIJUJb\":\"More feeds\",\"3Siwmw\":\"More options\",\"Y17r45\":\"More post options\",\"RA1KUZ\":\"Mute Account\",\"du0opt\":\"Mute accounts\",\"izOxJM\":\"Mute these accounts?\",\"jq7SjD\":\"Mute thread\",\"s22grX\":\"Muted accounts\",\"qUa+lV\":\"Muted Accounts\",\"gA0D9A\":\"Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.\",\"1QJzM7\":\"Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.\",\"Mysqyf\":\"My Birthday\",\"6MBNS/\":\"My Feeds\",\"hKtWk2\":\"My Profile\",\"Ha6iBv\":\"My Saved Feeds\",\"6YtxFj\":\"Name\",\"8yolS6\":\"Never lose access to your followers and data.\",\"isRobC\":\"New\",\"2B7HLH\":\"New post\",\"FGrimz\":\"New Post\",\"hXzOVo\":\"Next\",\"EatZYJ\":\"Next image\",\"1UzENP\":\"No\",\"flmDTf\":\"No description\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"No results found for \\\"\",[\"query\"],\"\\\"\"],\"kA9DpB\":[\"No results found for \",[\"0\"]],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"Not Applicable\",\"iyUCYw\":\"Not Applicable.\",\"iDNBZe\":\"Notifications\",\"5GGAqz\":\"Oh no!\",\"UaXeX3\":\"Okay\",\"Cqo2D+\":\"One or more images is missing alt text.\",\"M/Q2aG\":\"Open navigation\",\"M5PuNq\":\"Opens configurable language settings\",\"S67TOE\":\"Opens list of invite codes\",\"eSqpax\":\"Opens modal for using custom domain\",\"vYwHHI\":\"Opens moderation settings\",\"0tHyB7\":\"Opens screen with all saved feeds\",\"nmRoY/\":\"Opens the app password settings page\",\"6e9Apv\":\"Opens the home feed preferences\",\"O87Dr/\":\"Opens the storybook page\",\"G+PVmg\":\"Opens the system log page\",\"Jqb7sy\":\"Opens the threads preferences\",\"b22AVl\":\"Other account\",\"n+HLOP\":\"Other service\",\"1PKxQ7\":\"Other...\",\"8F1i42\":\"Page not found\",\"8ZsakT\":\"Password\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"Password updated!\",\"VeZE5Q\":\"Pictures meant for adults.\",\"zgoxy5\":\"Pinned Feeds\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed.\",\"9qpQ5O\":\"Please enter a unique name for this App Password or use our randomly generated one.\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"Please enter your password as well:\",\"y28hnO\":\"Post\",\"h5RcXU\":\"Post hidden\",\"r5zLS0\":\"Post language\",\"AzCucI\":\"Post Languages\",\"tJFPmV\":\"Post not found\",\"0+DQbr\":\"Potentially Misleading Link\",\"MHk+7g\":\"Previous image\",\"HeBcM5\":\"Primary Language\",\"x8iR7V\":\"Prioritize Your Follows\",\"rjGI/Q\":\"Privacy\",\"LcET2C\":\"Privacy Policy\",\"k1ifdL\":\"Processing...\",\"vERlcd\":\"Profile\",\"MrgqOW\":\"Protect your account by verifying your email.\",\"p1UmBX\":\"Public, shareable lists which can drive feeds.\",\"8HFFRQ\":\"Quote post\",\"+KrAHa\":\"Quote Post\",\"WlWsdE\":\"Ratios\",\"WEYdDv\":\"Recommended\",\"QNzcT3\":\"Recommended Feeds\",\"41UoJb\":\"Recommended Users\",\"t/YqKh\":\"Remove\",\"p/cRzf\":[\"Remove \",[\"0\"],\" from my feeds?\"],\"1O32oy\":\"Remove account\",\"W44VX5\":\"Remove feed\",\"Yy3FzB\":\"Remove from my feeds\",\"5ywtDz\":\"Remove image\",\"Dw/XUh\":\"Remove image preview\",\"TbDEfs\":\"Remove this feed from your saved feeds?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"Reply Filters\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"bDHSjj\":\"Report Account\",\"NKmI9f\":\"Report feed\",\"6iwm2r\":\"Report List\",\"6IcSvC\":\"Report post\",\"mkude1\":\"Repost\",\"JOV5dR\":\"Repost or quote post\",\"0zb9FX\":\"Reposted by\",\"bqG37Z\":\"Request Change\",\"2d9VrZ\":\"Require alt text before posting\",\"8XIT+P\":\"Required for this provider\",\"vJgYMA\":\"Reset code\",\"xEL92I\":\"Reset onboarding state\",\"RfwZxd\":\"Reset password\",\"bee/Fw\":\"Reset preferences state\",\"wToeoz\":\"Resets the onboarding state\",\"nIU7qI\":\"Resets the preferences state\",\"6gRgw8\":\"Retry\",\"hAbYQa\":\"Retry change handle\",\"tfDRzk\":\"Save\",\"KV2YQQ\":\"Save alt text\",\"y3aU20\":\"Save changes\",\"IUwGEM\":\"Save Changes\",\"Xs07Tg\":\"Save handle change\",\"BckA7m\":\"Save image crop\",\"+K+JDj\":\"Saved Feeds\",\"A1taO8\":\"Search\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"Security Step Required\",\"cNzyJW\":\"See what's next\",\"L5sM7N\":\"Select Bluesky Social\",\"o3dwub\":\"Select from an existing account\",\"GGw2AK\":\"Select service\",\"vECNLO\":\"Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown.\",\"m5aabx\":\"Select your app language for the default text to display in the app\",\"TiiOza\":\"Select your preferred language for translations in your feed.\",\"vp9yIB\":\"Send Confirmation Email\",\"65dxv8\":\"Send email\",\"i/TzEU\":\"Send Email\",\"RoafuO\":\"Send feedback\",\"4cijjm\":\"Send Report\",\"V/e7nf\":\"Set new password\",\"gwsie4\":\"Set this setting to \\\"No\\\" to hide all quote posts from your feed. Reposts will still be visible.\",\"IZjC3J\":\"Set this setting to \\\"No\\\" to hide all replies from your feed.\",\"KIgU3l\":\"Set this setting to \\\"No\\\" to hide all reposts from your feed.\",\"zaAyrz\":\"Set this setting to \\\"Yes\\\" to show replies in a threaded view. This is an experimental feature.\",\"fQV2eE\":\"Set this setting to \\\"Yes\\\" to show samples of your saved feeds in your following feed. This is an experimental feature.\",\"Tz0i8g\":\"Settings\",\"HfWHhJ\":\"Sexual activity or erotic nudity.\",\"Z8lGw6\":\"Share\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"Share link\",\"8vETh9\":\"Show\",\"aWAdCb\":\"Show anyway\",\"NijgXr\":\"Show Posts from My Feeds\",\"T3Mt8m\":\"Show Quote Posts\",\"BlW8X/\":\"Show Replies\",\"X4GwDb\":\"Show replies by people you follow before all other replies.\",\"GiogzH\":\"Show Reposts\",\"fhY/fL\":\"Show users\",\"5lWFkC\":\"Sign in\",\"n1ekoW\":\"Sign In\",\"N9o7n5\":[\"Sign in as \",[\"0\"]],\"FT1MVS\":\"Sign in as...\",\"+UpfFC\":\"Sign into\",\"fcWrnU\":\"Sign out\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"Signed in as\",\"6Uau97\":\"Skip\",\"0o5BFH\":\"Sort Replies\",\"GH1Rgk\":\"Sort replies to the same post by:\",\"1DA6ap\":\"Square\",\"aKEHLj\":\"Staging\",\"tgEXwM\":\"Status page\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"Subscribe\",\"5z3ICN\":\"Subscribe to this list\",\"TVFyMD\":\"Suggested Follows\",\"XYLcNv\":\"Support\",\"VjWeLI\":\"Switch Account\",\"D+NlUC\":\"System\",\"fP8jTZ\":\"System log\",\"HF6Iah\":\"Tall\",\"4Y5H+g\":\"Terms\",\"xowcRf\":\"Terms of Service\",\"p8Iz39\":\"Text input field\",\"GlPXQJ\":\"The account will be able to interact with you after unblocking.\",\"o4M2MP\":\"The Community Guidelines have been moved to <0/>\",\"U42lKc\":\"The Copyright Policy has been moved to <0/>\",\"G4EksE\":\"The post may have been deleted.\",\"WNR9db\":\"The Privacy Policy has been moved to <0/>\",\"LbEbIk\":[\"The support form has been moved. If you need help, please<0/> or visit \",[\"HELP_DESK_URL\"],\" to get in touch with us.\"],\"FGbRSr\":\"The Terms of Service have been moved to\",\"yUqcy2\":\"There was an unexpected issue in the application. Please let us know if this happened to you!\",\"KRYn8w\":[\"This \",[\"screenDescription\"],\" has been flagged:\"],\"lm845B\":\"This information is not shared with other users.\",\"5Pvw/O\":\"This is important in case you ever need to change your email or reset your password.\",\"sQQfZ9\":\"This is the service that keeps you online.\",\"CvX8qs\":\"This link is taking you to the following website:\",\"WKrUVy\":\"This post has been deleted.\",\"qpCA5s\":\"This warning is only available for posts with media attached.\",\"u9ThjD\":\"Thread Preferences\",\"zmXsk5\":\"Threaded Mode\",\"1x30Qt\":\"Toggle dropdown\",\"KFXQEt\":\"Transformations\",\"pi8x/S\":\"Translate\",\"KDw4GX\":\"Try again\",\"nc4Wfd\":\"Unable to contact your service. Please check your Internet connection.\",\"tuS5Jz\":\"Unblock\",\"0VrZZv\":\"Unblock Account\",\"6pYY4t\":\"Undo repost\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"Unmute Account\",\"s12/Py\":\"Unmute thread\",\"vaz2uI\":[\"Update \",[\"displayName\"],\" in Lists\"],\"YXMY4w\":\"Update Available\",\"RXbEvi\":\"Updating...\",\"Vwkfp4\":\"Upload a text file to:\",\"jTdnU6\":\"Use app passwords to login to other Bluesky clients without giving full access to your account or password.\",\"CH1am9\":\"Use default provider\",\"ZG8UvP\":\"Use this to sign into the other app along with your handle.\",\"cKXwwI\":\"Used by:\",\"t4Yp4Z\":\"User handle\",\"8tsrUV\":\"User Lists\",\"nZx9mr\":\"Username or email address\",\"Sxm8rQ\":\"Users\",\"MBOY4U\":\"Verify email\",\"Ejyv0o\":\"Verify my email\",\"9czCrB\":\"Verify My Email\",\"ibSVGR\":\"Verify New Email\",\"nHsQde\":\"View debug entry\",\"47jzzd\":\"View the avatar\",\"wK4H1r\":\"Visit Site\",\"qjBGxf\":\"We're so excited to have you join us!\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"We're sorry! We can't find the page you were looking for.\",\"meB+tZ\":\"Welcome to <0>Bluesky\",\"Mj7rl/\":[\"What is the issue with this \",[\"collectionName\"],\"?\"],\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"I5S9ZE\":\"Wide\",\"y02THm\":\"Write post\",\"6ckZRB\":\"Write your reply\",\"l75CjT\":\"Yes\",\"STPj0e\":\"You can change hosting providers at any time.\",\"67nRLM\":\"You can now sign in with your new password.\",\"lIcbCU\":\"You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.\",\"aFZZYi\":\"You don't have any pinned feeds.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"You don't have any saved feeds.\",\"RkXibf\":\"You have blocked the author or you have been blocked by the author.\",\"tCLJ9E\":\"You have no lists.\",\"soH9qC\":\"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.\",\"NDgp3i\":\"You have not created any app passwords yet. You can create one by pressing the button below.\",\"grqdXb\":\"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.\",\"RrDyEb\":\"You will receive an email with a \\\"reset code.\\\" Enter that code here, then enter your new password.\",\"gdRnT7\":\"Your account\",\"k7hmsH\":\"Your birth date\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"Your email has been saved! We'll be in touch soon.\",\"z2L+/9\":\"Your email has been updated but not verified. As a next step, please verify your new email.\",\"XZlIVw\":\"Your email has not yet been verified. This is an important security step which we recommend.\",\"qv9f4I\":\"Your full handle will be\",\"lvcqqG\":\"Your hosting provider\",\"fbFyAZ\":\"Your invite codes are hidden when logged in using an App Password\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\",\"okRPtW\":\"Your profile\",\"MvWO9d\":\"Your user handle\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"EtUMsZ\":\". This warning is only available for posts with media attached.\",\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" List\"],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>Choose your<1>Recommended<2>Feeds\",\"F657la\":\"<0>Follow some<1>Recommended<2>Users\",\"6RmyWt\":\"<0>Here is your app password. Use this to sign into the other app along with your handle.\",\"XCTqGE\":\"A new version of the app is available. Please update to continue using the app.\",\"AnNF5e\":\"Accessibility\",\"AeXO77\":\"Account\",\"4WY4MD\":\"Account options\",\"m16xKo\":\"Add\",\"fBBX+K\":\"Add a content warning\",\"JU3hs2\":\"Add a user to this list\",\"MPPZ54\":\"Add account\",\"LkA8jz\":\"Add alt text\",\"Z8idyM\":\"Add details\",\"AoXl11\":\"Add details to report\",\"iE6B/9\":\"Add link card\",\"EXHdP1\":\"Add link card:\",\"x6laaL\":\"Add the following DNS record to your domain:\",\"UmzMP4\":\"Add to Lists\",\"hCrQ0L\":\"Add to my feeds\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"Adjust the number of likes a reply must have to be shown in your feed.\",\"qLa52r\":\"Adult Content\",\"sxkWRg\":\"Advanced\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"Alt text\",\"0QlT7/\":\"Alt text describes images for blind and low-vision users, and helps give context to everyone.\",\"woXbjq\":[\"An email has been sent to \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"Fon2dK\":[\"An email has been sent to your previous address, \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"HZFm5R\":\"and\",\"fdjKGe\":\"App Language\",\"SMmUnj\":\"App passwords\",\"8q4WlH\":\"App Passwords\",\"aAIQg2\":\"Appearance\",\"SSDZ+T\":[\"Are you sure you want to delete the app password \\\"\",[\"name\"],\"\\\"?\"],\"0BIeIs\":\"Are you sure you'd like to discard this draft?\",\"6foA8n\":\"Are you sure?\",\"/mSd6b\":\"Are you sure? This cannot be undone.\",\"EbvWd3\":\"Artistic or non-erotic nudity.\",\"iH8pgl\":\"Back\",\"ehOkF+\":\"Basics\",\"+gCI2a\":\"Birthday\",\"pieVBA\":\"Birthday:\",\"m1dqxu\":\"Block Account\",\"ffIfdM\":\"Block accounts\",\"fdYcMy\":\"Block these accounts?\",\"KWykPE\":\"Blocked accounts\",\"JuqQpF\":\"Blocked Accounts\",\"HG4qt4\":\"Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"8LNSUt\":\"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.\",\"HFCE4A\":\"Blocked post.\",\"zl+QbX\":\"Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"C50OGr\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"Camera\",\"JGGrPC\":\"Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long.\",\"dEgA5A\":\"Cancel\",\"aMH9rr\":\"Cancel account deletion\",\"kc3E4R\":\"Cancel add image alt text\",\"wg4LHQ\":\"Cancel change handle\",\"hFL1Li\":\"Cancel image crop\",\"tijH8t\":\"Cancel profile editing\",\"Qe4C/d\":\"Cancel quote post\",\"5TviPn\":\"Cancel search\",\"nss3UV\":\"Cancel waitlist signup\",\"o+XJ9D\":\"Change\",\"pQco5R\":\"Change handle\",\"Q5e1U/\":\"Change Handle\",\"a3NAfL\":\"Change my email\",\"4vatyk\":\"Change Your Email\",\"Yn3C90\":\"Check out some recommended feeds. Tap + to add them to your list of pinned feeds.\",\"ioZXIH\":\"Check out some recommended users. Follow them to see similar users.\",\"/+X+/K\":\"Check your inbox for an email with the confirmation code to enter below:\",\"Rt502e\":\"Choose Service\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"BwcLKv\":\"Choose your\",\"Wk8hkn\":\"Choose your password\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"Clear search query\",\"flH7u/\":\"Close alert\",\"hYmnbk\":\"Close bottom drawer\",\"47L1V1\":\"Close image\",\"l49ujN\":\"Close image viewer\",\"UryHFO\":\"Close navigation footer\",\"KHzDTk\":\"Community Guidelines\",\"o8UUti\":\"Compose reply\",\"7VpPHA\":\"Confirm\",\"q8upsf\":\"Confirm Change\",\"8pNKIr\":\"Confirm content language settings\",\"tGg8Kt\":\"Confirm delete account\",\"ioZOzk\":\"Confirmation code\",\"J28zul\":\"Connecting...\",\"l879p1\":\"Content filtering\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"cogwXi\":\"Content Warning\",\"FG7AQv\":\"Content warnings\",\"xGVfLh\":\"Continue\",\"6V3Ea3\":\"Copied\",\"he3ygx\":\"Copy\",\"iQgJaz\":\"Copy post text\",\"u40k/o\":\"Copyright Policy\",\"7wWvgo\":\"Could not load feed\",\"8NNr/O\":\"Could not load list\",\"mpt9T+\":\"Create a new account\",\"IS0nrP\":\"Create Account\",\"6HbhpU\":\"Create new account\",\"MXSt4t\":[\"Created \",[\"0\"]],\"GAD3Dx\":\"Custom domain\",\"ZQKLI1\":\"Danger Zone\",\"pvnfJD\":\"Dark\",\"ZDGm40\":\"Delete account\",\"vzX5FB\":\"Delete Account\",\"gUEtxf\":\"Delete app password\",\"84uE/A\":\"Delete List\",\"ktknoE\":\"Delete my account\",\"szz0+N\":\"Delete my account…\",\"04G5Az\":\"Delete post\",\"FbPNuJ\":\"Delete this post?\",\"u+1OHY\":\"Deleted post.\",\"Nu4oKW\":\"Description\",\"dacKHE\":\"Dev Server\",\"2ygkE8\":\"Developer Tools\",\"bzSI52\":\"Discard\",\"BryYJR\":\"Discard draft\",\"pbLwal\":\"Discover new feeds\",\"pfa8F0\":\"Display name\",\"0gS7M5\":\"Display Name\",\"iZ5pMB\":\"Domain verified!\",\"DPfwMq\":\"Done\",\"zT97vP\":[\"Done\",[\"extraText\"]],\"4uwlSD\":\"Each code works once. You'll receive more invite codes periodically.\",\"XQFMOm\":\"Edit image\",\"S7M0uU\":\"Edit list details\",\"cLmurE\":\"Edit My Feeds\",\"bRZ5XW\":\"Edit my profile\",\"9OpVZg\":\"Edit profile\",\"QJQd1J\":\"Edit Profile\",\"Jn7kox\":\"Edit Saved Feeds\",\"O3oNi5\":\"Email\",\"ATGYL1\":\"Email address\",\"pJJ0Vp\":\"Email Updated\",\"9Qs99X\":\"Email:\",\"96mted\":\"Enable this setting to only see replies between people you follow.\",\"YbIxza\":\"Enter the address of your provider:\",\"BfIgP6\":\"Enter the domain you want to use\",\"cHrOqs\":\"Enter the email you used to create your account. We'll send you a \\\"reset code\\\" so you can set a new password.\",\"xRPn3U\":\"Enter your email address\",\"+inPGm\":\"Enter your new email address below.\",\"T0KLp4\":\"Enter your username and password\",\"4BITzH\":\"Error:\",\"0PkE20\":\"Expand alt text\",\"/5K/KL\":\"Failed to load recommended feeds\",\"4yCy8i\":\"Feed offline\",\"N0CqyO\":\"Feed Preferences\",\"YirHq7\":\"Feedback\",\"2DoBvq\":\"Feeds\",\"I3iUBQ\":\"Feeds are created by users to curate content. Choose some feeds that you find interesting.\",\"2+6lmO\":\"Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information.\",\"Qzj1WT\":\"Finding similar accounts...\",\"QKSrQV\":\"Fine-tune the content you see on your home screen.\",\"r+KeyR\":\"Fine-tune the discussion threads.\",\"MKEPCY\":\"Follow\",\"AD4dxh\":\"Follow some\",\"Wezu5M\":\"Follow some users to get started. We can recommend you more users based on who you find interesting.\",\"YY2BTA\":\"Followed users only\",\"x5LEuB\":\"Followers\",\"NIjL2Y\":\"following\",\"y6sq5j\":\"Following\",\"p3UO/y\":\"Follows you\",\"5RhDkD\":\"For security reasons, we'll need to send a confirmation code to your email address.\",\"NJPhAO\":\"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.\",\"5bDfuq\":\"Forgot\",\"hEPLrs\":\"Forgot password\",\"dn8X5t\":\"Forgot Password\",\"U+kFad\":\"Gallery\",\"c3b0B0\":\"Get Started\",\"CKyk7Q\":\"Go back\",\"sr0UJD\":\"Go Back\",\"Rtp0y7\":\"Go to next\",\"Nf7oXL\":\"Handle\",\"c3XJ18\":\"Help\",\"uX/4+/\":\"Here is your app password.\",\"vLyv1R\":\"Hide\",\"qdOx2q\":\"Hide user list\",\"up7j9X\":\"Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.\",\"WTcLyw\":\"Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.\",\"/8MHCt\":\"Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.\",\"3zJH1g\":\"Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.\",\"yNNyhI\":\"Hmmm, we're having trouble finding this feed. It may have been deleted.\",\"i0qMbr\":\"Home\",\"sXZ8IU\":\"Home Feed Preferences\",\"yt7fhu\":\"Hosting provider\",\"s2xA6t\":\"Hosting provider address\",\"o+axy6\":\"I have a code\",\"wey2os\":\"I have my own domain\",\"WlEcKr\":\"If none are selected, suitable for all ages.\",\"VCk0rR\":\"Image alt text\",\"STGpNQ\":\"Image options\",\"6o7+En\":\"In Your Network\",\"dSKHAa\":\"Invalid username or password\",\"MFKlMB\":\"Invite\",\"F5MZVk\":\"Invite a Friend\",\"6KlkHI\":\"Invite code\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"Join the waitlist\",\"6iVTdm\":\"Join the waitlist.\",\"SNzppu\":\"Join Waitlist\",\"Dcq5kL\":\"Language selection\",\"pVhZHk\":\"Language Settings\",\"GAmD3h\":\"Languages\",\"NgeSlx\":\"Learn More\",\"rj0Lke\":\"Learn more about this warning\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"QfDITI\":\"Leaving Bluesky\",\"Esfg1M\":\"Let's get your password reset!\",\"exYcTF\":\"Library\",\"1njn7W\":\"Light\",\"BvSY1i\":\"Like this feed\",\"8/ALSr\":\"Liked by\",\"FuZWua\":\"List Avatar\",\"8mjA4F\":\"List Name\",\"h16FyT\":\"Lists\",\"ujW4FW\":\"Load more posts\",\"7EHsGr\":\"Load new notifications\",\"VkLESX\":\"Load new posts\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"Local dev server\",\"cR9UpQ\":\"Login to account that is not listed\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"Make sure this is where you intend to go!\",\"zucql+\":\"Menu\",\"DzmsLV\":\"Moderation\",\"NTIbv4\":\"Moderation lists\",\"FIJUJb\":\"More feeds\",\"3Siwmw\":\"More options\",\"Y17r45\":\"More post options\",\"RA1KUZ\":\"Mute Account\",\"du0opt\":\"Mute accounts\",\"izOxJM\":\"Mute these accounts?\",\"jq7SjD\":\"Mute thread\",\"s22grX\":\"Muted accounts\",\"qUa+lV\":\"Muted Accounts\",\"gA0D9A\":\"Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.\",\"1QJzM7\":\"Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.\",\"Mysqyf\":\"My Birthday\",\"6MBNS/\":\"My Feeds\",\"hKtWk2\":\"My Profile\",\"Ha6iBv\":\"My Saved Feeds\",\"6YtxFj\":\"Name\",\"8yolS6\":\"Never lose access to your followers and data.\",\"isRobC\":\"New\",\"2B7HLH\":\"New post\",\"FGrimz\":\"New Post\",\"hXzOVo\":\"Next\",\"EatZYJ\":\"Next image\",\"1UzENP\":\"No\",\"flmDTf\":\"No description\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"No results found for \\\"\",[\"query\"],\"\\\"\"],\"kA9DpB\":[\"No results found for \",[\"0\"]],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"Not Applicable\",\"iyUCYw\":\"Not Applicable.\",\"iDNBZe\":\"Notifications\",\"5GGAqz\":\"Oh no!\",\"UaXeX3\":\"Okay\",\"Cqo2D+\":\"One or more images is missing alt text.\",\"M/Q2aG\":\"Open navigation\",\"M5PuNq\":\"Opens configurable language settings\",\"eSqpax\":\"Opens modal for using custom domain\",\"vYwHHI\":\"Opens moderation settings\",\"0tHyB7\":\"Opens screen with all saved feeds\",\"nmRoY/\":\"Opens the app password settings page\",\"6e9Apv\":\"Opens the home feed preferences\",\"O87Dr/\":\"Opens the storybook page\",\"G+PVmg\":\"Opens the system log page\",\"Jqb7sy\":\"Opens the threads preferences\",\"b22AVl\":\"Other account\",\"n+HLOP\":\"Other service\",\"1PKxQ7\":\"Other...\",\"8F1i42\":\"Page not found\",\"8ZsakT\":\"Password\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"Password updated!\",\"VeZE5Q\":\"Pictures meant for adults.\",\"zgoxy5\":\"Pinned Feeds\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed.\",\"9qpQ5O\":\"Please enter a unique name for this App Password or use our randomly generated one.\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"Please enter your password as well:\",\"y28hnO\":\"Post\",\"h5RcXU\":\"Post hidden\",\"r5zLS0\":\"Post language\",\"AzCucI\":\"Post Languages\",\"tJFPmV\":\"Post not found\",\"0+DQbr\":\"Potentially Misleading Link\",\"MHk+7g\":\"Previous image\",\"HeBcM5\":\"Primary Language\",\"x8iR7V\":\"Prioritize Your Follows\",\"rjGI/Q\":\"Privacy\",\"LcET2C\":\"Privacy Policy\",\"k1ifdL\":\"Processing...\",\"vERlcd\":\"Profile\",\"MrgqOW\":\"Protect your account by verifying your email.\",\"p1UmBX\":\"Public, shareable lists which can drive feeds.\",\"8HFFRQ\":\"Quote post\",\"+KrAHa\":\"Quote Post\",\"WlWsdE\":\"Ratios\",\"WEYdDv\":\"Recommended\",\"QNzcT3\":\"Recommended Feeds\",\"41UoJb\":\"Recommended Users\",\"t/YqKh\":\"Remove\",\"p/cRzf\":[\"Remove \",[\"0\"],\" from my feeds?\"],\"1O32oy\":\"Remove account\",\"W44VX5\":\"Remove feed\",\"Yy3FzB\":\"Remove from my feeds\",\"5ywtDz\":\"Remove image\",\"Dw/XUh\":\"Remove image preview\",\"TbDEfs\":\"Remove this feed from your saved feeds?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"Reply Filters\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"bDHSjj\":\"Report Account\",\"NKmI9f\":\"Report feed\",\"6iwm2r\":\"Report List\",\"6IcSvC\":\"Report post\",\"mkude1\":\"Repost\",\"JOV5dR\":\"Repost or quote post\",\"0zb9FX\":\"Reposted by\",\"bqG37Z\":\"Request Change\",\"2d9VrZ\":\"Require alt text before posting\",\"8XIT+P\":\"Required for this provider\",\"vJgYMA\":\"Reset code\",\"xEL92I\":\"Reset onboarding state\",\"RfwZxd\":\"Reset password\",\"bee/Fw\":\"Reset preferences state\",\"wToeoz\":\"Resets the onboarding state\",\"nIU7qI\":\"Resets the preferences state\",\"6gRgw8\":\"Retry\",\"hAbYQa\":\"Retry change handle\",\"tfDRzk\":\"Save\",\"KV2YQQ\":\"Save alt text\",\"y3aU20\":\"Save changes\",\"IUwGEM\":\"Save Changes\",\"Xs07Tg\":\"Save handle change\",\"BckA7m\":\"Save image crop\",\"+K+JDj\":\"Saved Feeds\",\"A1taO8\":\"Search\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"Security Step Required\",\"cNzyJW\":\"See what's next\",\"L5sM7N\":\"Select Bluesky Social\",\"o3dwub\":\"Select from an existing account\",\"GGw2AK\":\"Select service\",\"vECNLO\":\"Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown.\",\"m5aabx\":\"Select your app language for the default text to display in the app\",\"TiiOza\":\"Select your preferred language for translations in your feed.\",\"vp9yIB\":\"Send Confirmation Email\",\"65dxv8\":\"Send email\",\"i/TzEU\":\"Send Email\",\"RoafuO\":\"Send feedback\",\"4cijjm\":\"Send Report\",\"V/e7nf\":\"Set new password\",\"gwsie4\":\"Set this setting to \\\"No\\\" to hide all quote posts from your feed. Reposts will still be visible.\",\"IZjC3J\":\"Set this setting to \\\"No\\\" to hide all replies from your feed.\",\"KIgU3l\":\"Set this setting to \\\"No\\\" to hide all reposts from your feed.\",\"zaAyrz\":\"Set this setting to \\\"Yes\\\" to show replies in a threaded view. This is an experimental feature.\",\"fQV2eE\":\"Set this setting to \\\"Yes\\\" to show samples of your saved feeds in your following feed. This is an experimental feature.\",\"Tz0i8g\":\"Settings\",\"HfWHhJ\":\"Sexual activity or erotic nudity.\",\"Z8lGw6\":\"Share\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"Share link\",\"8vETh9\":\"Show\",\"aWAdCb\":\"Show anyway\",\"NijgXr\":\"Show Posts from My Feeds\",\"T3Mt8m\":\"Show Quote Posts\",\"BlW8X/\":\"Show Replies\",\"X4GwDb\":\"Show replies by people you follow before all other replies.\",\"GiogzH\":\"Show Reposts\",\"fhY/fL\":\"Show users\",\"5lWFkC\":\"Sign in\",\"n1ekoW\":\"Sign In\",\"N9o7n5\":[\"Sign in as \",[\"0\"]],\"FT1MVS\":\"Sign in as...\",\"+UpfFC\":\"Sign into\",\"fcWrnU\":\"Sign out\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"Signed in as\",\"6Uau97\":\"Skip\",\"0o5BFH\":\"Sort Replies\",\"GH1Rgk\":\"Sort replies to the same post by:\",\"1DA6ap\":\"Square\",\"aKEHLj\":\"Staging\",\"tgEXwM\":\"Status page\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"Subscribe\",\"5z3ICN\":\"Subscribe to this list\",\"TVFyMD\":\"Suggested Follows\",\"XYLcNv\":\"Support\",\"VjWeLI\":\"Switch Account\",\"D+NlUC\":\"System\",\"fP8jTZ\":\"System log\",\"HF6Iah\":\"Tall\",\"4Y5H+g\":\"Terms\",\"xowcRf\":\"Terms of Service\",\"p8Iz39\":\"Text input field\",\"GlPXQJ\":\"The account will be able to interact with you after unblocking.\",\"o4M2MP\":\"The Community Guidelines have been moved to <0/>\",\"U42lKc\":\"The Copyright Policy has been moved to <0/>\",\"G4EksE\":\"The post may have been deleted.\",\"WNR9db\":\"The Privacy Policy has been moved to <0/>\",\"LbEbIk\":[\"The support form has been moved. If you need help, please<0/> or visit \",[\"HELP_DESK_URL\"],\" to get in touch with us.\"],\"FGbRSr\":\"The Terms of Service have been moved to\",\"yUqcy2\":\"There was an unexpected issue in the application. Please let us know if this happened to you!\",\"KRYn8w\":[\"This \",[\"screenDescription\"],\" has been flagged:\"],\"lm845B\":\"This information is not shared with other users.\",\"5Pvw/O\":\"This is important in case you ever need to change your email or reset your password.\",\"sQQfZ9\":\"This is the service that keeps you online.\",\"CvX8qs\":\"This link is taking you to the following website:\",\"WKrUVy\":\"This post has been deleted.\",\"qpCA5s\":\"This warning is only available for posts with media attached.\",\"u9ThjD\":\"Thread Preferences\",\"zmXsk5\":\"Threaded Mode\",\"1x30Qt\":\"Toggle dropdown\",\"KFXQEt\":\"Transformations\",\"pi8x/S\":\"Translate\",\"KDw4GX\":\"Try again\",\"nc4Wfd\":\"Unable to contact your service. Please check your Internet connection.\",\"tuS5Jz\":\"Unblock\",\"0VrZZv\":\"Unblock Account\",\"6pYY4t\":\"Undo repost\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"Unmute Account\",\"s12/Py\":\"Unmute thread\",\"vaz2uI\":[\"Update \",[\"displayName\"],\" in Lists\"],\"YXMY4w\":\"Update Available\",\"RXbEvi\":\"Updating...\",\"Vwkfp4\":\"Upload a text file to:\",\"jTdnU6\":\"Use app passwords to login to other Bluesky clients without giving full access to your account or password.\",\"CH1am9\":\"Use default provider\",\"ZG8UvP\":\"Use this to sign into the other app along with your handle.\",\"cKXwwI\":\"Used by:\",\"t4Yp4Z\":\"User handle\",\"8tsrUV\":\"User Lists\",\"nZx9mr\":\"Username or email address\",\"Sxm8rQ\":\"Users\",\"MBOY4U\":\"Verify email\",\"Ejyv0o\":\"Verify my email\",\"9czCrB\":\"Verify My Email\",\"ibSVGR\":\"Verify New Email\",\"nHsQde\":\"View debug entry\",\"47jzzd\":\"View the avatar\",\"wK4H1r\":\"Visit Site\",\"qjBGxf\":\"We're so excited to have you join us!\",\"1xpRAp\":\"We're sorry, but this content is not viewable without a Bluesky account.\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"We're sorry! We can't find the page you were looking for.\",\"meB+tZ\":\"Welcome to <0>Bluesky\",\"Mj7rl/\":[\"What is the issue with this \",[\"collectionName\"],\"?\"],\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"I5S9ZE\":\"Wide\",\"y02THm\":\"Write post\",\"6ckZRB\":\"Write your reply\",\"l75CjT\":\"Yes\",\"STPj0e\":\"You can change hosting providers at any time.\",\"67nRLM\":\"You can now sign in with your new password.\",\"lIcbCU\":\"You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.\",\"aFZZYi\":\"You don't have any pinned feeds.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"You don't have any saved feeds.\",\"RkXibf\":\"You have blocked the author or you have been blocked by the author.\",\"tCLJ9E\":\"You have no lists.\",\"soH9qC\":\"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.\",\"NDgp3i\":\"You have not created any app passwords yet. You can create one by pressing the button below.\",\"grqdXb\":\"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.\",\"RrDyEb\":\"You will receive an email with a \\\"reset code.\\\" Enter that code here, then enter your new password.\",\"gdRnT7\":\"Your account\",\"k7hmsH\":\"Your birth date\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"Your email has been saved! We'll be in touch soon.\",\"z2L+/9\":\"Your email has been updated but not verified. As a next step, please verify your new email.\",\"XZlIVw\":\"Your email has not yet been verified. This is an important security step which we recommend.\",\"qv9f4I\":\"Your full handle will be\",\"lvcqqG\":\"Your hosting provider\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\",\"okRPtW\":\"Your profile\",\"MvWO9d\":\"Your user handle\"}")}; \ No newline at end of file diff --git a/src/locale/locales/es/messages.po b/src/locale/locales/es/messages.po index af6206d8..ba26e99e 100644 --- a/src/locale/locales/es/messages.po +++ b/src/locale/locales/es/messages.po @@ -21,12 +21,6 @@ msgstr "" #~ msgid ". This warning is only available for posts with media attached." #~ msgstr "" -#: src/view/screens/Settings.tsx:410 -#: src/view/shell/desktop/RightNav.tsx:158 -#: src/view/shell/Drawer.tsx:527 -msgid "{0, plural, one {# invite code available} other {# invite codes available}}" -msgstr "" - #: src/view/com/modals/Repost.tsx:44 msgid "{0}" msgstr "" @@ -35,11 +29,6 @@ msgstr "" msgid "{0} {purposeLabel} List" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:141 -#: src/view/shell/Drawer.tsx:504 -msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" -msgstr "" - #: src/view/screens/Search/Search.tsx:86 msgid "{message}" msgstr "" @@ -61,12 +50,12 @@ msgid "A new version of the app is available. Please update to continue using th msgstr "" #: src/view/com/modals/EditImage.tsx:299 -#: src/view/screens/Settings.tsx:422 +#: src/view/screens/Settings.tsx:410 msgid "Accessibility" msgstr "" #: src/view/com/auth/login/LoginForm.tsx:161 -#: src/view/screens/Settings.tsx:289 +#: src/view/screens/Settings.tsx:288 msgid "Account" msgstr "" @@ -88,8 +77,8 @@ msgstr "" msgid "Add a user to this list" msgstr "" -#: src/view/screens/Settings.tsx:358 -#: src/view/screens/Settings.tsx:367 +#: src/view/screens/Settings.tsx:357 +#: src/view/screens/Settings.tsx:366 msgid "Add account" msgstr "" @@ -140,7 +129,7 @@ msgstr "" msgid "Adult Content" msgstr "" -#: src/view/screens/Settings.tsx:574 +#: src/view/screens/Settings.tsx:562 msgid "Advanced" msgstr "" @@ -172,7 +161,7 @@ msgstr "" msgid "App Language" msgstr "" -#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:582 msgid "App passwords" msgstr "" @@ -180,7 +169,7 @@ msgstr "" msgid "App Passwords" msgstr "" -#: src/view/screens/Settings.tsx:437 +#: src/view/screens/Settings.tsx:425 msgid "Appearance" msgstr "" @@ -205,7 +194,7 @@ msgid "Artistic or non-erotic nudity." msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:145 -#: src/view/com/auth/login/ChooseAccountForm.tsx:122 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 #: src/view/com/auth/login/LoginForm.tsx:251 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 @@ -217,7 +206,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/view/screens/Settings.tsx:466 +#: src/view/screens/Settings.tsx:454 msgid "Basics" msgstr "" @@ -226,7 +215,7 @@ msgstr "" msgid "Birthday" msgstr "" -#: src/view/screens/Settings.tsx:315 +#: src/view/screens/Settings.tsx:314 msgid "Birthday:" msgstr "" @@ -291,7 +280,7 @@ msgstr "" msgid "Bluesky.Social" msgstr "" -#: src/view/screens/Settings.tsx:723 +#: src/view/screens/Settings.tsx:711 msgid "Build version {0} {1}" msgstr "" @@ -359,12 +348,12 @@ msgstr "" msgid "Cancel waitlist signup" msgstr "" -#: src/view/screens/Settings.tsx:309 +#: src/view/screens/Settings.tsx:308 msgid "Change" msgstr "" -#: src/view/screens/Settings.tsx:606 -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:603 msgid "Change handle" msgstr "" @@ -408,19 +397,19 @@ msgstr "" msgid "Choose your password" msgstr "" -#: src/view/screens/Settings.tsx:699 +#: src/view/screens/Settings.tsx:687 msgid "Clear all legacy storage data" msgstr "" -#: src/view/screens/Settings.tsx:701 +#: src/view/screens/Settings.tsx:689 msgid "Clear all legacy storage data (restart after this)" msgstr "" -#: src/view/screens/Settings.tsx:711 +#: src/view/screens/Settings.tsx:699 msgid "Clear all storage data" msgstr "" -#: src/view/screens/Settings.tsx:713 +#: src/view/screens/Settings.tsx:701 msgid "Clear all storage data (restart after this)" msgstr "" @@ -561,7 +550,7 @@ msgstr "" msgid "Custom domain" msgstr "" -#: src/view/screens/Settings.tsx:620 +#: src/view/screens/Settings.tsx:608 msgid "Danger Zone" msgstr "" @@ -569,7 +558,7 @@ msgstr "" #~ msgid "Dark" #~ msgstr "" -#: src/view/screens/Settings.tsx:627 +#: src/view/screens/Settings.tsx:615 msgid "Delete account" msgstr "" @@ -591,7 +580,7 @@ msgstr "" msgid "Delete my account" msgstr "" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:625 msgid "Delete my account…" msgstr "" @@ -618,7 +607,7 @@ msgstr "" msgid "Dev Server" msgstr "" -#: src/view/screens/Settings.tsx:642 +#: src/view/screens/Settings.tsx:630 msgid "Developer Tools" msgstr "" @@ -677,7 +666,7 @@ msgid "Edit list details" msgstr "" #: src/view/screens/Feeds.tsx:367 -#: src/view/screens/SavedFeeds.tsx:75 +#: src/view/screens/SavedFeeds.tsx:85 msgid "Edit My Feeds" msgstr "" @@ -712,7 +701,7 @@ msgstr "" msgid "Email Updated" msgstr "" -#: src/view/screens/Settings.tsx:293 +#: src/view/screens/Settings.tsx:292 msgid "Email:" msgstr "" @@ -757,7 +746,7 @@ msgstr "" msgid "Failed to load recommended feeds" msgstr "" -#: src/view/screens/Feeds.tsx:558 +#: src/view/screens/Feeds.tsx:559 msgid "Feed offline" msgstr "" @@ -765,12 +754,12 @@ msgstr "" msgid "Feed Preferences" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:64 +#: src/view/shell/desktop/RightNav.tsx:65 #: src/view/shell/Drawer.tsx:411 msgid "Feedback" msgstr "" -#: src/view/screens/Feeds.tsx:474 +#: src/view/screens/Feeds.tsx:475 #: src/view/shell/bottom-bar/BottomBar.tsx:169 #: src/view/shell/desktop/LeftNav.tsx:342 #: src/view/shell/Drawer.tsx:328 @@ -782,7 +771,7 @@ msgstr "" msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." msgstr "" -#: src/view/screens/SavedFeeds.tsx:132 +#: src/view/screens/SavedFeeds.tsx:156 msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." msgstr "" @@ -884,7 +873,7 @@ msgstr "" msgid "Handle" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:93 +#: src/view/shell/desktop/RightNav.tsx:94 #: src/view/shell/Drawer.tsx:421 msgid "Help" msgstr "" @@ -901,6 +890,26 @@ msgstr "" msgid "Hide user list" msgstr "" +#: src/view/com/posts/FeedErrorMessage.tsx:101 +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:89 +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:95 +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:92 +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:86 +msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +msgstr "" + #: src/view/shell/bottom-bar/BottomBar.tsx:125 #: src/view/shell/desktop/LeftNav.tsx:306 #: src/view/shell/Drawer.tsx:275 @@ -908,9 +917,9 @@ msgstr "" msgid "Home" msgstr "" -#: src/view/com/pager/FeedsTabBarMobile.tsx:71 +#: src/view/com/pager/FeedsTabBarMobile.tsx:99 #: src/view/screens/PreferencesHomeFeed.tsx:95 -#: src/view/screens/Settings.tsx:486 +#: src/view/screens/Settings.tsx:474 msgid "Home Feed Preferences" msgstr "" @@ -953,12 +962,12 @@ msgstr "" msgid "Invalid username or password" msgstr "" -#: src/view/screens/Settings.tsx:386 +#: src/view/screens/Settings.tsx:385 msgid "Invite" msgstr "" #: src/view/com/modals/InviteCodes.tsx:91 -#: src/view/screens/Settings.tsx:374 +#: src/view/screens/Settings.tsx:373 msgid "Invite a Friend" msgstr "" @@ -991,7 +1000,7 @@ msgstr "" msgid "Language Settings" msgstr "" -#: src/view/screens/Settings.tsx:546 +#: src/view/screens/Settings.tsx:534 msgid "Languages" msgstr "" @@ -1031,7 +1040,7 @@ msgstr "" #~ msgid "Light" #~ msgstr "" -#: src/view/screens/ProfileFeed.tsx:625 +#: src/view/screens/ProfileFeed.tsx:626 msgid "Like this feed" msgstr "" @@ -1059,7 +1068,7 @@ msgstr "" msgid "Load more posts" msgstr "" -#: src/view/screens/Notifications.tsx:120 +#: src/view/screens/Notifications.tsx:130 msgid "Load new notifications" msgstr "" @@ -1075,11 +1084,11 @@ msgstr "" msgid "Local dev server" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:104 +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 msgid "Login to account that is not listed" msgstr "" -#: src/view/screens/ProfileFeed.tsx:477 +#: src/view/screens/ProfileFeed.tsx:478 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 "" @@ -1092,7 +1101,7 @@ msgid "Menu" msgstr "" #: src/view/screens/Moderation.tsx:51 -#: src/view/screens/Settings.tsx:568 +#: src/view/screens/Settings.tsx:556 #: src/view/shell/desktop/LeftNav.tsx:400 #: src/view/shell/Drawer.tsx:346 #: src/view/shell/Drawer.tsx:347 @@ -1108,7 +1117,7 @@ msgid "More feeds" msgstr "" #: src/view/com/profile/ProfileHeader.tsx:506 -#: src/view/screens/ProfileFeed.tsx:367 +#: src/view/screens/ProfileFeed.tsx:368 #: src/view/screens/ProfileList.tsx:506 msgid "More options" msgstr "" @@ -1161,7 +1170,7 @@ msgstr "" msgid "My Profile" msgstr "" -#: src/view/screens/Settings.tsx:525 +#: src/view/screens/Settings.tsx:513 msgid "My Saved Feeds" msgstr "" @@ -1179,9 +1188,9 @@ msgid "New" msgstr "" #: src/view/com/feeds/FeedPage.tsx:187 -#: src/view/screens/Feeds.tsx:509 -#: src/view/screens/Profile.tsx:380 -#: src/view/screens/ProfileFeed.tsx:447 +#: src/view/screens/Feeds.tsx:510 +#: src/view/screens/Profile.tsx:381 +#: src/view/screens/ProfileFeed.tsx:448 #: src/view/screens/ProfileList.tsx:199 #: src/view/screens/ProfileList.tsx:231 #: src/view/shell/desktop/LeftNav.tsx:255 @@ -1212,7 +1221,7 @@ msgstr "" msgid "No" msgstr "" -#: src/view/screens/ProfileFeed.tsx:618 +#: src/view/screens/ProfileFeed.tsx:619 #: src/view/screens/ProfileList.tsx:632 msgid "No description" msgstr "" @@ -1221,7 +1230,7 @@ msgstr "" msgid "No result" msgstr "" -#: src/view/screens/Feeds.tsx:451 +#: src/view/screens/Feeds.tsx:452 msgid "No results found for \"{query}\"" msgstr "" @@ -1246,8 +1255,8 @@ msgstr "" msgid "Not Applicable." msgstr "" -#: src/view/screens/Notifications.tsx:87 -#: src/view/screens/Notifications.tsx:111 +#: src/view/screens/Notifications.tsx:97 +#: src/view/screens/Notifications.tsx:121 #: src/view/shell/bottom-bar/BottomBar.tsx:196 #: src/view/shell/desktop/LeftNav.tsx:364 #: src/view/shell/Drawer.tsx:299 @@ -1267,52 +1276,47 @@ msgstr "" msgid "One or more images is missing alt text." msgstr "" -#: src/view/com/pager/FeedsTabBarMobile.tsx:51 +#: src/view/com/pager/FeedsTabBarMobile.tsx:79 msgid "Open navigation" msgstr "" -#: src/view/screens/Settings.tsx:538 +#: src/view/screens/Settings.tsx:526 msgid "Opens configurable language settings" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:146 -#: src/view/shell/Drawer.tsx:509 -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:563 +#: src/view/screens/Settings.tsx:551 msgid "Opens moderation settings" msgstr "" -#: src/view/screens/Settings.tsx:519 +#: src/view/screens/Settings.tsx:507 msgid "Opens screen with all saved feeds" msgstr "" -#: src/view/screens/Settings.tsx:586 +#: src/view/screens/Settings.tsx:574 msgid "Opens the app password settings page" msgstr "" -#: src/view/screens/Settings.tsx:478 +#: src/view/screens/Settings.tsx:466 msgid "Opens the home feed preferences" msgstr "" -#: src/view/screens/Settings.tsx:669 +#: src/view/screens/Settings.tsx:657 msgid "Opens the storybook page" msgstr "" -#: src/view/screens/Settings.tsx:649 +#: src/view/screens/Settings.tsx:637 msgid "Opens the system log page" msgstr "" -#: src/view/screens/Settings.tsx:499 +#: src/view/screens/Settings.tsx:487 msgid "Opens the threads preferences" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:109 +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" msgstr "" @@ -1349,7 +1353,7 @@ msgstr "" msgid "Pictures meant for adults." msgstr "" -#: src/view/screens/SavedFeeds.tsx:79 +#: src/view/screens/SavedFeeds.tsx:89 msgid "Pinned Feeds" msgstr "" @@ -1415,7 +1419,7 @@ msgstr "" msgid "Prioritize Your Follows" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:75 +#: src/view/shell/desktop/RightNav.tsx:76 msgid "Privacy" msgstr "" @@ -1434,7 +1438,7 @@ msgstr "" msgid "Profile" msgstr "" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:782 msgid "Protect your account by verifying your email." msgstr "" @@ -1476,7 +1480,7 @@ msgstr "" msgid "Remove" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:92 +#: src/view/com/feeds/FeedSourceCard.tsx:108 msgid "Remove {0} from my feeds?" msgstr "" @@ -1484,11 +1488,11 @@ msgstr "" msgid "Remove account" msgstr "" -#: src/view/com/posts/FeedErrorMessage.tsx:106 +#: src/view/com/posts/FeedErrorMessage.tsx:118 msgid "Remove feed" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:91 +#: src/view/com/feeds/FeedSourceCard.tsx:107 #: src/view/screens/ProfileFeed.tsx:278 msgid "Remove from my feeds" msgstr "" @@ -1501,7 +1505,7 @@ msgstr "" msgid "Remove image preview" msgstr "" -#: src/view/com/posts/FeedErrorMessage.tsx:107 +#: src/view/com/posts/FeedErrorMessage.tsx:119 msgid "Remove this feed from your saved feeds?" msgstr "" @@ -1565,7 +1569,7 @@ msgstr "" msgid "Reset code" msgstr "" -#: src/view/screens/Settings.tsx:691 +#: src/view/screens/Settings.tsx:679 msgid "Reset onboarding state" msgstr "" @@ -1573,15 +1577,15 @@ msgstr "" msgid "Reset password" msgstr "" -#: src/view/screens/Settings.tsx:681 +#: src/view/screens/Settings.tsx:669 msgid "Reset preferences state" msgstr "" -#: src/view/screens/Settings.tsx:689 +#: src/view/screens/Settings.tsx:677 msgid "Resets the onboarding state" msgstr "" -#: src/view/screens/Settings.tsx:679 +#: src/view/screens/Settings.tsx:667 msgid "Resets the preferences state" msgstr "" @@ -1628,7 +1632,7 @@ msgstr "" msgid "Save image crop" msgstr "" -#: src/view/screens/SavedFeeds.tsx:105 +#: src/view/screens/SavedFeeds.tsx:122 msgid "Saved Feeds" msgstr "" @@ -1726,7 +1730,7 @@ msgstr "" 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:280 +#: src/view/screens/Settings.tsx:279 #: src/view/shell/desktop/LeftNav.tsx:436 #: src/view/shell/Drawer.tsx:380 #: src/view/shell/Drawer.tsx:381 @@ -1751,7 +1755,7 @@ msgstr "" #~ msgid "Share link" #~ msgstr "" -#: src/view/screens/Settings.tsx:319 +#: src/view/screens/Settings.tsx:318 msgid "Show" msgstr "" @@ -1795,11 +1799,11 @@ msgstr "" msgid "Sign In" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:37 +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 msgid "Sign in as {0}" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:94 +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 #: src/view/com/auth/login/Login.tsx:100 msgid "Sign in as..." msgstr "" @@ -1823,7 +1827,7 @@ msgstr "" msgid "Sign up or sign in to join the conversation" msgstr "" -#: src/view/screens/Settings.tsx:330 +#: src/view/screens/Settings.tsx:329 msgid "Signed in as" msgstr "" @@ -1848,11 +1852,11 @@ msgstr "" msgid "Staging" msgstr "" -#: src/view/screens/Settings.tsx:735 +#: src/view/screens/Settings.tsx:723 msgid "Status page" msgstr "" -#: src/view/screens/Settings.tsx:671 +#: src/view/screens/Settings.tsx:659 msgid "Storybook" msgstr "" @@ -1881,7 +1885,7 @@ msgstr "" #~ msgid "System" #~ msgstr "" -#: src/view/screens/Settings.tsx:651 +#: src/view/screens/Settings.tsx:639 msgid "System log" msgstr "" @@ -1889,7 +1893,7 @@ msgstr "" msgid "Tall" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:84 +#: src/view/shell/desktop/RightNav.tsx:85 msgid "Terms" msgstr "" @@ -1962,7 +1966,7 @@ msgid "This warning is only available for posts with media attached." msgstr "" #: src/view/screens/PreferencesThreads.tsx:53 -#: src/view/screens/Settings.tsx:508 +#: src/view/screens/Settings.tsx:496 msgid "Thread Preferences" msgstr "" @@ -2069,15 +2073,15 @@ msgstr "" msgid "Users" msgstr "" -#: src/view/screens/Settings.tsx:755 +#: src/view/screens/Settings.tsx:743 msgid "Verify email" msgstr "" -#: src/view/screens/Settings.tsx:780 +#: src/view/screens/Settings.tsx:768 msgid "Verify my email" msgstr "" -#: src/view/screens/Settings.tsx:789 +#: src/view/screens/Settings.tsx:777 msgid "Verify My Email" msgstr "" @@ -2102,6 +2106,10 @@ msgstr "" msgid "We're so excited to have you join us!" msgstr "" +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "We're sorry, but this content is not viewable without a Bluesky account." +msgstr "" + #: src/view/screens/Search/Search.tsx:236 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" @@ -2157,7 +2165,7 @@ msgstr "" 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:92 +#: src/view/screens/SavedFeeds.tsx:102 msgid "You don't have any pinned feeds." msgstr "" @@ -2165,7 +2173,7 @@ msgstr "" msgid "You don't have any saved feeds!" msgstr "" -#: src/view/screens/SavedFeeds.tsx:118 +#: src/view/screens/SavedFeeds.tsx:135 msgid "You don't have any saved feeds." msgstr "" @@ -2228,12 +2236,6 @@ msgstr "" msgid "Your hosting provider" msgstr "" -#: src/view/screens/Settings.tsx:405 -#: src/view/shell/desktop/RightNav.tsx:127 -#: src/view/shell/Drawer.tsx:523 -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 "" diff --git a/src/locale/locales/fr/messages.js b/src/locale/locales/fr/messages.js index 3b56d1f1..93651032 100644 --- a/src/locale/locales/fr/messages.js +++ b/src/locale/locales/fr/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"EtUMsZ\":\". This warning is only available for posts with media attached.\",\"ebOBhv\":[[\"0\",\"plural\",{\"one\":[\"#\",\" invite code available\"],\"other\":[\"#\",\" invite codes available\"]}]],\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" List\"],\"zgN03j\":[[\"invitesAvailable\",\"plural\",{\"one\":[\"Invite codes: \",\"#\",\" available\"],\"other\":[\"Invite codes: \",\"#\",\" available\"]}]],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>Choose your<1>Recommended<2>Feeds\",\"F657la\":\"<0>Follow some<1>Recommended<2>Users\",\"6RmyWt\":\"<0>Here is your app password. Use this to sign into the other app along with your handle.\",\"XCTqGE\":\"A new version of the app is available. Please update to continue using the app.\",\"AnNF5e\":\"Accessibility\",\"AeXO77\":\"Account\",\"4WY4MD\":\"Account options\",\"m16xKo\":\"Add\",\"fBBX+K\":\"Add a content warning\",\"JU3hs2\":\"Add a user to this list\",\"MPPZ54\":\"Add account\",\"LkA8jz\":\"Add alt text\",\"Z8idyM\":\"Add details\",\"AoXl11\":\"Add details to report\",\"iE6B/9\":\"Add link card\",\"EXHdP1\":\"Add link card:\",\"x6laaL\":\"Add the following DNS record to your domain:\",\"UmzMP4\":\"Add to Lists\",\"hCrQ0L\":\"Add to my feeds\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"Adjust the number of likes a reply must have to be shown in your feed.\",\"qLa52r\":\"Adult Content\",\"sxkWRg\":\"Advanced\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"Alt text\",\"0QlT7/\":\"Alt text describes images for blind and low-vision users, and helps give context to everyone.\",\"woXbjq\":[\"An email has been sent to \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"Fon2dK\":[\"An email has been sent to your previous address, \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"HZFm5R\":\"and\",\"fdjKGe\":\"App Language\",\"SMmUnj\":\"App passwords\",\"8q4WlH\":\"App Passwords\",\"aAIQg2\":\"Appearance\",\"SSDZ+T\":[\"Are you sure you want to delete the app password \\\"\",[\"name\"],\"\\\"?\"],\"0BIeIs\":\"Are you sure you'd like to discard this draft?\",\"6foA8n\":\"Are you sure?\",\"/mSd6b\":\"Are you sure? This cannot be undone.\",\"EbvWd3\":\"Artistic or non-erotic nudity.\",\"iH8pgl\":\"Back\",\"ehOkF+\":\"Basics\",\"+gCI2a\":\"Birthday\",\"pieVBA\":\"Birthday:\",\"m1dqxu\":\"Block Account\",\"ffIfdM\":\"Block accounts\",\"fdYcMy\":\"Block these accounts?\",\"KWykPE\":\"Blocked accounts\",\"JuqQpF\":\"Blocked Accounts\",\"HG4qt4\":\"Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"8LNSUt\":\"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.\",\"HFCE4A\":\"Blocked post.\",\"zl+QbX\":\"Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"C50OGr\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"Camera\",\"JGGrPC\":\"Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long.\",\"dEgA5A\":\"Cancel\",\"aMH9rr\":\"Cancel account deletion\",\"kc3E4R\":\"Cancel add image alt text\",\"wg4LHQ\":\"Cancel change handle\",\"hFL1Li\":\"Cancel image crop\",\"tijH8t\":\"Cancel profile editing\",\"Qe4C/d\":\"Cancel quote post\",\"5TviPn\":\"Cancel search\",\"nss3UV\":\"Cancel waitlist signup\",\"o+XJ9D\":\"Change\",\"pQco5R\":\"Change handle\",\"Q5e1U/\":\"Change Handle\",\"a3NAfL\":\"Change my email\",\"4vatyk\":\"Change Your Email\",\"Yn3C90\":\"Check out some recommended feeds. Tap + to add them to your list of pinned feeds.\",\"ioZXIH\":\"Check out some recommended users. Follow them to see similar users.\",\"/+X+/K\":\"Check your inbox for an email with the confirmation code to enter below:\",\"Rt502e\":\"Choose Service\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"BwcLKv\":\"Choose your\",\"Wk8hkn\":\"Choose your password\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"Clear search query\",\"flH7u/\":\"Close alert\",\"hYmnbk\":\"Close bottom drawer\",\"47L1V1\":\"Close image\",\"l49ujN\":\"Close image viewer\",\"UryHFO\":\"Close navigation footer\",\"KHzDTk\":\"Community Guidelines\",\"o8UUti\":\"Compose reply\",\"7VpPHA\":\"Confirm\",\"q8upsf\":\"Confirm Change\",\"8pNKIr\":\"Confirm content language settings\",\"tGg8Kt\":\"Confirm delete account\",\"ioZOzk\":\"Confirmation code\",\"J28zul\":\"Connecting...\",\"l879p1\":\"Content filtering\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"cogwXi\":\"Content Warning\",\"FG7AQv\":\"Content warnings\",\"xGVfLh\":\"Continue\",\"6V3Ea3\":\"Copied\",\"he3ygx\":\"Copy\",\"iQgJaz\":\"Copy post text\",\"u40k/o\":\"Copyright Policy\",\"7wWvgo\":\"Could not load feed\",\"8NNr/O\":\"Could not load list\",\"mpt9T+\":\"Create a new account\",\"IS0nrP\":\"Create Account\",\"6HbhpU\":\"Create new account\",\"MXSt4t\":[\"Created \",[\"0\"]],\"GAD3Dx\":\"Custom domain\",\"ZQKLI1\":\"Danger Zone\",\"pvnfJD\":\"Dark\",\"ZDGm40\":\"Delete account\",\"vzX5FB\":\"Delete Account\",\"gUEtxf\":\"Delete app password\",\"84uE/A\":\"Delete List\",\"ktknoE\":\"Delete my account\",\"szz0+N\":\"Delete my account…\",\"04G5Az\":\"Delete post\",\"FbPNuJ\":\"Delete this post?\",\"u+1OHY\":\"Deleted post.\",\"Nu4oKW\":\"Description\",\"dacKHE\":\"Dev Server\",\"2ygkE8\":\"Developer Tools\",\"bzSI52\":\"Discard\",\"BryYJR\":\"Discard draft\",\"pbLwal\":\"Discover new feeds\",\"pfa8F0\":\"Display name\",\"0gS7M5\":\"Display Name\",\"iZ5pMB\":\"Domain verified!\",\"DPfwMq\":\"Done\",\"zT97vP\":[\"Done\",[\"extraText\"]],\"4uwlSD\":\"Each code works once. You'll receive more invite codes periodically.\",\"XQFMOm\":\"Edit image\",\"S7M0uU\":\"Edit list details\",\"cLmurE\":\"Edit My Feeds\",\"bRZ5XW\":\"Edit my profile\",\"9OpVZg\":\"Edit profile\",\"QJQd1J\":\"Edit Profile\",\"Jn7kox\":\"Edit Saved Feeds\",\"O3oNi5\":\"Email\",\"ATGYL1\":\"Email address\",\"pJJ0Vp\":\"Email Updated\",\"9Qs99X\":\"Email:\",\"96mted\":\"Enable this setting to only see replies between people you follow.\",\"YbIxza\":\"Enter the address of your provider:\",\"BfIgP6\":\"Enter the domain you want to use\",\"cHrOqs\":\"Enter the email you used to create your account. We'll send you a \\\"reset code\\\" so you can set a new password.\",\"xRPn3U\":\"Enter your email address\",\"+inPGm\":\"Enter your new email address below.\",\"T0KLp4\":\"Enter your username and password\",\"4BITzH\":\"Error:\",\"0PkE20\":\"Expand alt text\",\"/5K/KL\":\"Failed to load recommended feeds\",\"4yCy8i\":\"Feed offline\",\"N0CqyO\":\"Feed Preferences\",\"YirHq7\":\"Feedback\",\"2DoBvq\":\"Feeds\",\"I3iUBQ\":\"Feeds are created by users to curate content. Choose some feeds that you find interesting.\",\"2+6lmO\":\"Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information.\",\"Qzj1WT\":\"Finding similar accounts...\",\"QKSrQV\":\"Fine-tune the content you see on your home screen.\",\"r+KeyR\":\"Fine-tune the discussion threads.\",\"MKEPCY\":\"Follow\",\"AD4dxh\":\"Follow some\",\"Wezu5M\":\"Follow some users to get started. We can recommend you more users based on who you find interesting.\",\"YY2BTA\":\"Followed users only\",\"x5LEuB\":\"Followers\",\"NIjL2Y\":\"following\",\"y6sq5j\":\"Following\",\"p3UO/y\":\"Follows you\",\"5RhDkD\":\"For security reasons, we'll need to send a confirmation code to your email address.\",\"NJPhAO\":\"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.\",\"5bDfuq\":\"Forgot\",\"hEPLrs\":\"Forgot password\",\"dn8X5t\":\"Forgot Password\",\"U+kFad\":\"Gallery\",\"c3b0B0\":\"Get Started\",\"CKyk7Q\":\"Go back\",\"sr0UJD\":\"Go Back\",\"Rtp0y7\":\"Go to next\",\"Nf7oXL\":\"Handle\",\"c3XJ18\":\"Help\",\"uX/4+/\":\"Here is your app password.\",\"vLyv1R\":\"Hide\",\"qdOx2q\":\"Hide user list\",\"i0qMbr\":\"Home\",\"sXZ8IU\":\"Home Feed Preferences\",\"yt7fhu\":\"Hosting provider\",\"s2xA6t\":\"Hosting provider address\",\"o+axy6\":\"I have a code\",\"wey2os\":\"I have my own domain\",\"WlEcKr\":\"If none are selected, suitable for all ages.\",\"VCk0rR\":\"Image alt text\",\"STGpNQ\":\"Image options\",\"6o7+En\":\"In Your Network\",\"dSKHAa\":\"Invalid username or password\",\"MFKlMB\":\"Invite\",\"F5MZVk\":\"Invite a Friend\",\"6KlkHI\":\"Invite code\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"Join the waitlist\",\"6iVTdm\":\"Join the waitlist.\",\"SNzppu\":\"Join Waitlist\",\"Dcq5kL\":\"Language selection\",\"pVhZHk\":\"Language Settings\",\"GAmD3h\":\"Languages\",\"NgeSlx\":\"Learn More\",\"rj0Lke\":\"Learn more about this warning\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"QfDITI\":\"Leaving Bluesky\",\"Esfg1M\":\"Let's get your password reset!\",\"exYcTF\":\"Library\",\"1njn7W\":\"Light\",\"BvSY1i\":\"Like this feed\",\"8/ALSr\":\"Liked by\",\"FuZWua\":\"List Avatar\",\"8mjA4F\":\"List Name\",\"h16FyT\":\"Lists\",\"ujW4FW\":\"Load more posts\",\"7EHsGr\":\"Load new notifications\",\"VkLESX\":\"Load new posts\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"Local dev server\",\"cR9UpQ\":\"Login to account that is not listed\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"Make sure this is where you intend to go!\",\"zucql+\":\"Menu\",\"DzmsLV\":\"Moderation\",\"NTIbv4\":\"Moderation lists\",\"FIJUJb\":\"More feeds\",\"3Siwmw\":\"More options\",\"Y17r45\":\"More post options\",\"RA1KUZ\":\"Mute Account\",\"du0opt\":\"Mute accounts\",\"izOxJM\":\"Mute these accounts?\",\"jq7SjD\":\"Mute thread\",\"s22grX\":\"Muted accounts\",\"qUa+lV\":\"Muted Accounts\",\"gA0D9A\":\"Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.\",\"1QJzM7\":\"Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.\",\"Mysqyf\":\"My Birthday\",\"6MBNS/\":\"My Feeds\",\"hKtWk2\":\"My Profile\",\"Ha6iBv\":\"My Saved Feeds\",\"6YtxFj\":\"Name\",\"8yolS6\":\"Never lose access to your followers and data.\",\"isRobC\":\"New\",\"2B7HLH\":\"New post\",\"FGrimz\":\"New Post\",\"hXzOVo\":\"Next\",\"EatZYJ\":\"Next image\",\"1UzENP\":\"No\",\"flmDTf\":\"No description\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"No results found for \\\"\",[\"query\"],\"\\\"\"],\"kA9DpB\":[\"No results found for \",[\"0\"]],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"Not Applicable\",\"iyUCYw\":\"Not Applicable.\",\"iDNBZe\":\"Notifications\",\"5GGAqz\":\"Oh no!\",\"UaXeX3\":\"Okay\",\"Cqo2D+\":\"One or more images is missing alt text.\",\"M/Q2aG\":\"Open navigation\",\"M5PuNq\":\"Opens configurable language settings\",\"S67TOE\":\"Opens list of invite codes\",\"eSqpax\":\"Opens modal for using custom domain\",\"vYwHHI\":\"Opens moderation settings\",\"0tHyB7\":\"Opens screen with all saved feeds\",\"nmRoY/\":\"Opens the app password settings page\",\"6e9Apv\":\"Opens the home feed preferences\",\"O87Dr/\":\"Opens the storybook page\",\"G+PVmg\":\"Opens the system log page\",\"Jqb7sy\":\"Opens the threads preferences\",\"b22AVl\":\"Other account\",\"n+HLOP\":\"Other service\",\"1PKxQ7\":\"Other...\",\"8F1i42\":\"Page not found\",\"8ZsakT\":\"Password\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"Password updated!\",\"VeZE5Q\":\"Pictures meant for adults.\",\"zgoxy5\":\"Pinned Feeds\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed.\",\"9qpQ5O\":\"Please enter a unique name for this App Password or use our randomly generated one.\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"Please enter your password as well:\",\"y28hnO\":\"Post\",\"h5RcXU\":\"Post hidden\",\"r5zLS0\":\"Post language\",\"AzCucI\":\"Post Languages\",\"tJFPmV\":\"Post not found\",\"0+DQbr\":\"Potentially Misleading Link\",\"MHk+7g\":\"Previous image\",\"HeBcM5\":\"Primary Language\",\"x8iR7V\":\"Prioritize Your Follows\",\"rjGI/Q\":\"Privacy\",\"LcET2C\":\"Privacy Policy\",\"k1ifdL\":\"Processing...\",\"vERlcd\":\"Profile\",\"MrgqOW\":\"Protect your account by verifying your email.\",\"p1UmBX\":\"Public, shareable lists which can drive feeds.\",\"8HFFRQ\":\"Quote post\",\"+KrAHa\":\"Quote Post\",\"WlWsdE\":\"Ratios\",\"WEYdDv\":\"Recommended\",\"QNzcT3\":\"Recommended Feeds\",\"41UoJb\":\"Recommended Users\",\"t/YqKh\":\"Remove\",\"p/cRzf\":[\"Remove \",[\"0\"],\" from my feeds?\"],\"1O32oy\":\"Remove account\",\"W44VX5\":\"Remove feed\",\"Yy3FzB\":\"Remove from my feeds\",\"5ywtDz\":\"Remove image\",\"Dw/XUh\":\"Remove image preview\",\"TbDEfs\":\"Remove this feed from your saved feeds?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"Reply Filters\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"bDHSjj\":\"Report Account\",\"NKmI9f\":\"Report feed\",\"6iwm2r\":\"Report List\",\"6IcSvC\":\"Report post\",\"mkude1\":\"Repost\",\"JOV5dR\":\"Repost or quote post\",\"0zb9FX\":\"Reposted by\",\"bqG37Z\":\"Request Change\",\"2d9VrZ\":\"Require alt text before posting\",\"8XIT+P\":\"Required for this provider\",\"vJgYMA\":\"Reset code\",\"xEL92I\":\"Reset onboarding state\",\"RfwZxd\":\"Reset password\",\"bee/Fw\":\"Reset preferences state\",\"wToeoz\":\"Resets the onboarding state\",\"nIU7qI\":\"Resets the preferences state\",\"6gRgw8\":\"Retry\",\"hAbYQa\":\"Retry change handle\",\"tfDRzk\":\"Save\",\"KV2YQQ\":\"Save alt text\",\"y3aU20\":\"Save changes\",\"IUwGEM\":\"Save Changes\",\"Xs07Tg\":\"Save handle change\",\"BckA7m\":\"Save image crop\",\"+K+JDj\":\"Saved Feeds\",\"A1taO8\":\"Search\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"Security Step Required\",\"cNzyJW\":\"See what's next\",\"L5sM7N\":\"Select Bluesky Social\",\"o3dwub\":\"Select from an existing account\",\"GGw2AK\":\"Select service\",\"vECNLO\":\"Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown.\",\"m5aabx\":\"Select your app language for the default text to display in the app\",\"TiiOza\":\"Select your preferred language for translations in your feed.\",\"vp9yIB\":\"Send Confirmation Email\",\"65dxv8\":\"Send email\",\"i/TzEU\":\"Send Email\",\"RoafuO\":\"Send feedback\",\"4cijjm\":\"Send Report\",\"V/e7nf\":\"Set new password\",\"gwsie4\":\"Set this setting to \\\"No\\\" to hide all quote posts from your feed. Reposts will still be visible.\",\"IZjC3J\":\"Set this setting to \\\"No\\\" to hide all replies from your feed.\",\"KIgU3l\":\"Set this setting to \\\"No\\\" to hide all reposts from your feed.\",\"zaAyrz\":\"Set this setting to \\\"Yes\\\" to show replies in a threaded view. This is an experimental feature.\",\"fQV2eE\":\"Set this setting to \\\"Yes\\\" to show samples of your saved feeds in your following feed. This is an experimental feature.\",\"Tz0i8g\":\"Settings\",\"HfWHhJ\":\"Sexual activity or erotic nudity.\",\"Z8lGw6\":\"Share\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"Share link\",\"8vETh9\":\"Show\",\"aWAdCb\":\"Show anyway\",\"NijgXr\":\"Show Posts from My Feeds\",\"T3Mt8m\":\"Show Quote Posts\",\"BlW8X/\":\"Show Replies\",\"X4GwDb\":\"Show replies by people you follow before all other replies.\",\"GiogzH\":\"Show Reposts\",\"fhY/fL\":\"Show users\",\"5lWFkC\":\"Sign in\",\"n1ekoW\":\"Sign In\",\"N9o7n5\":[\"Sign in as \",[\"0\"]],\"FT1MVS\":\"Sign in as...\",\"+UpfFC\":\"Sign into\",\"fcWrnU\":\"Sign out\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"Signed in as\",\"6Uau97\":\"Skip\",\"0o5BFH\":\"Sort Replies\",\"GH1Rgk\":\"Sort replies to the same post by:\",\"1DA6ap\":\"Square\",\"aKEHLj\":\"Staging\",\"tgEXwM\":\"Status page\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"Subscribe\",\"5z3ICN\":\"Subscribe to this list\",\"TVFyMD\":\"Suggested Follows\",\"XYLcNv\":\"Support\",\"VjWeLI\":\"Switch Account\",\"D+NlUC\":\"System\",\"fP8jTZ\":\"System log\",\"HF6Iah\":\"Tall\",\"4Y5H+g\":\"Terms\",\"xowcRf\":\"Terms of Service\",\"p8Iz39\":\"Text input field\",\"GlPXQJ\":\"The account will be able to interact with you after unblocking.\",\"o4M2MP\":\"The Community Guidelines have been moved to <0/>\",\"U42lKc\":\"The Copyright Policy has been moved to <0/>\",\"G4EksE\":\"The post may have been deleted.\",\"WNR9db\":\"The Privacy Policy has been moved to <0/>\",\"LbEbIk\":[\"The support form has been moved. If you need help, please<0/> or visit \",[\"HELP_DESK_URL\"],\" to get in touch with us.\"],\"FGbRSr\":\"The Terms of Service have been moved to\",\"yUqcy2\":\"There was an unexpected issue in the application. Please let us know if this happened to you!\",\"KRYn8w\":[\"This \",[\"screenDescription\"],\" has been flagged:\"],\"lm845B\":\"This information is not shared with other users.\",\"5Pvw/O\":\"This is important in case you ever need to change your email or reset your password.\",\"sQQfZ9\":\"This is the service that keeps you online.\",\"CvX8qs\":\"This link is taking you to the following website:\",\"WKrUVy\":\"This post has been deleted.\",\"qpCA5s\":\"This warning is only available for posts with media attached.\",\"u9ThjD\":\"Thread Preferences\",\"zmXsk5\":\"Threaded Mode\",\"1x30Qt\":\"Toggle dropdown\",\"KFXQEt\":\"Transformations\",\"pi8x/S\":\"Translate\",\"KDw4GX\":\"Try again\",\"nc4Wfd\":\"Unable to contact your service. Please check your Internet connection.\",\"tuS5Jz\":\"Unblock\",\"0VrZZv\":\"Unblock Account\",\"6pYY4t\":\"Undo repost\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"Unmute Account\",\"s12/Py\":\"Unmute thread\",\"vaz2uI\":[\"Update \",[\"displayName\"],\" in Lists\"],\"YXMY4w\":\"Update Available\",\"RXbEvi\":\"Updating...\",\"Vwkfp4\":\"Upload a text file to:\",\"jTdnU6\":\"Use app passwords to login to other Bluesky clients without giving full access to your account or password.\",\"CH1am9\":\"Use default provider\",\"ZG8UvP\":\"Use this to sign into the other app along with your handle.\",\"cKXwwI\":\"Used by:\",\"t4Yp4Z\":\"User handle\",\"8tsrUV\":\"User Lists\",\"nZx9mr\":\"Username or email address\",\"Sxm8rQ\":\"Users\",\"MBOY4U\":\"Verify email\",\"Ejyv0o\":\"Verify my email\",\"9czCrB\":\"Verify My Email\",\"ibSVGR\":\"Verify New Email\",\"nHsQde\":\"View debug entry\",\"47jzzd\":\"View the avatar\",\"wK4H1r\":\"Visit Site\",\"qjBGxf\":\"We're so excited to have you join us!\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"We're sorry! We can't find the page you were looking for.\",\"meB+tZ\":\"Welcome to <0>Bluesky\",\"Mj7rl/\":[\"What is the issue with this \",[\"collectionName\"],\"?\"],\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"I5S9ZE\":\"Wide\",\"y02THm\":\"Write post\",\"6ckZRB\":\"Write your reply\",\"l75CjT\":\"Yes\",\"STPj0e\":\"You can change hosting providers at any time.\",\"67nRLM\":\"You can now sign in with your new password.\",\"lIcbCU\":\"You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.\",\"aFZZYi\":\"You don't have any pinned feeds.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"You don't have any saved feeds.\",\"RkXibf\":\"You have blocked the author or you have been blocked by the author.\",\"tCLJ9E\":\"You have no lists.\",\"soH9qC\":\"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.\",\"NDgp3i\":\"You have not created any app passwords yet. You can create one by pressing the button below.\",\"grqdXb\":\"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.\",\"RrDyEb\":\"You will receive an email with a \\\"reset code.\\\" Enter that code here, then enter your new password.\",\"gdRnT7\":\"Your account\",\"k7hmsH\":\"Your birth date\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"Your email has been saved! We'll be in touch soon.\",\"z2L+/9\":\"Your email has been updated but not verified. As a next step, please verify your new email.\",\"XZlIVw\":\"Your email has not yet been verified. This is an important security step which we recommend.\",\"qv9f4I\":\"Your full handle will be\",\"lvcqqG\":\"Your hosting provider\",\"fbFyAZ\":\"Your invite codes are hidden when logged in using an App Password\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\",\"okRPtW\":\"Your profile\",\"MvWO9d\":\"Your user handle\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- end of feed -\",\"EtUMsZ\":\". This warning is only available for posts with media attached.\",\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" List\"],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>Choose your<1>Recommended<2>Feeds\",\"F657la\":\"<0>Follow some<1>Recommended<2>Users\",\"6RmyWt\":\"<0>Here is your app password. Use this to sign into the other app along with your handle.\",\"XCTqGE\":\"A new version of the app is available. Please update to continue using the app.\",\"AnNF5e\":\"Accessibility\",\"AeXO77\":\"Account\",\"4WY4MD\":\"Account options\",\"m16xKo\":\"Add\",\"fBBX+K\":\"Add a content warning\",\"JU3hs2\":\"Add a user to this list\",\"MPPZ54\":\"Add account\",\"LkA8jz\":\"Add alt text\",\"Z8idyM\":\"Add details\",\"AoXl11\":\"Add details to report\",\"iE6B/9\":\"Add link card\",\"EXHdP1\":\"Add link card:\",\"x6laaL\":\"Add the following DNS record to your domain:\",\"UmzMP4\":\"Add to Lists\",\"hCrQ0L\":\"Add to my feeds\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"Adjust the number of likes a reply must have to be shown in your feed.\",\"qLa52r\":\"Adult Content\",\"sxkWRg\":\"Advanced\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"Alt text\",\"0QlT7/\":\"Alt text describes images for blind and low-vision users, and helps give context to everyone.\",\"woXbjq\":[\"An email has been sent to \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"Fon2dK\":[\"An email has been sent to your previous address, \",[\"0\"],\". It includes a confirmation code which you can enter below.\"],\"HZFm5R\":\"and\",\"fdjKGe\":\"App Language\",\"SMmUnj\":\"App passwords\",\"8q4WlH\":\"App Passwords\",\"aAIQg2\":\"Appearance\",\"SSDZ+T\":[\"Are you sure you want to delete the app password \\\"\",[\"name\"],\"\\\"?\"],\"0BIeIs\":\"Are you sure you'd like to discard this draft?\",\"6foA8n\":\"Are you sure?\",\"/mSd6b\":\"Are you sure? This cannot be undone.\",\"EbvWd3\":\"Artistic or non-erotic nudity.\",\"iH8pgl\":\"Back\",\"ehOkF+\":\"Basics\",\"+gCI2a\":\"Birthday\",\"pieVBA\":\"Birthday:\",\"m1dqxu\":\"Block Account\",\"ffIfdM\":\"Block accounts\",\"fdYcMy\":\"Block these accounts?\",\"KWykPE\":\"Blocked accounts\",\"JuqQpF\":\"Blocked Accounts\",\"HG4qt4\":\"Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"8LNSUt\":\"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.\",\"HFCE4A\":\"Blocked post.\",\"zl+QbX\":\"Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you.\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky is flexible.\",\"odLrdl\":\"Bluesky is open.\",\"/LsWK4\":\"Bluesky is public.\",\"C50OGr\":\"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.\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"Camera\",\"JGGrPC\":\"Can only contain letters, numbers, spaces, dashes, and underscores. Must be at least 4 characters long, but no more than 32 characters long.\",\"dEgA5A\":\"Cancel\",\"aMH9rr\":\"Cancel account deletion\",\"kc3E4R\":\"Cancel add image alt text\",\"wg4LHQ\":\"Cancel change handle\",\"hFL1Li\":\"Cancel image crop\",\"tijH8t\":\"Cancel profile editing\",\"Qe4C/d\":\"Cancel quote post\",\"5TviPn\":\"Cancel search\",\"nss3UV\":\"Cancel waitlist signup\",\"o+XJ9D\":\"Change\",\"pQco5R\":\"Change handle\",\"Q5e1U/\":\"Change Handle\",\"a3NAfL\":\"Change my email\",\"4vatyk\":\"Change Your Email\",\"Yn3C90\":\"Check out some recommended feeds. Tap + to add them to your list of pinned feeds.\",\"ioZXIH\":\"Check out some recommended users. Follow them to see similar users.\",\"/+X+/K\":\"Check your inbox for an email with the confirmation code to enter below:\",\"Rt502e\":\"Choose Service\",\"/L45sc\":\"Choose the algorithms that power your experience with custom feeds.\",\"BwcLKv\":\"Choose your\",\"Wk8hkn\":\"Choose your password\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"Clear search query\",\"flH7u/\":\"Close alert\",\"hYmnbk\":\"Close bottom drawer\",\"47L1V1\":\"Close image\",\"l49ujN\":\"Close image viewer\",\"UryHFO\":\"Close navigation footer\",\"KHzDTk\":\"Community Guidelines\",\"o8UUti\":\"Compose reply\",\"7VpPHA\":\"Confirm\",\"q8upsf\":\"Confirm Change\",\"8pNKIr\":\"Confirm content language settings\",\"tGg8Kt\":\"Confirm delete account\",\"ioZOzk\":\"Confirmation code\",\"J28zul\":\"Connecting...\",\"l879p1\":\"Content filtering\",\"m8j6up\":\"Content Filtering\",\"/PlAsF\":\"Content Languages\",\"cogwXi\":\"Content Warning\",\"FG7AQv\":\"Content warnings\",\"xGVfLh\":\"Continue\",\"6V3Ea3\":\"Copied\",\"he3ygx\":\"Copy\",\"iQgJaz\":\"Copy post text\",\"u40k/o\":\"Copyright Policy\",\"7wWvgo\":\"Could not load feed\",\"8NNr/O\":\"Could not load list\",\"mpt9T+\":\"Create a new account\",\"IS0nrP\":\"Create Account\",\"6HbhpU\":\"Create new account\",\"MXSt4t\":[\"Created \",[\"0\"]],\"GAD3Dx\":\"Custom domain\",\"ZQKLI1\":\"Danger Zone\",\"pvnfJD\":\"Dark\",\"ZDGm40\":\"Delete account\",\"vzX5FB\":\"Delete Account\",\"gUEtxf\":\"Delete app password\",\"84uE/A\":\"Delete List\",\"ktknoE\":\"Delete my account\",\"szz0+N\":\"Delete my account…\",\"04G5Az\":\"Delete post\",\"FbPNuJ\":\"Delete this post?\",\"u+1OHY\":\"Deleted post.\",\"Nu4oKW\":\"Description\",\"dacKHE\":\"Dev Server\",\"2ygkE8\":\"Developer Tools\",\"bzSI52\":\"Discard\",\"BryYJR\":\"Discard draft\",\"pbLwal\":\"Discover new feeds\",\"pfa8F0\":\"Display name\",\"0gS7M5\":\"Display Name\",\"iZ5pMB\":\"Domain verified!\",\"DPfwMq\":\"Done\",\"zT97vP\":[\"Done\",[\"extraText\"]],\"4uwlSD\":\"Each code works once. You'll receive more invite codes periodically.\",\"XQFMOm\":\"Edit image\",\"S7M0uU\":\"Edit list details\",\"cLmurE\":\"Edit My Feeds\",\"bRZ5XW\":\"Edit my profile\",\"9OpVZg\":\"Edit profile\",\"QJQd1J\":\"Edit Profile\",\"Jn7kox\":\"Edit Saved Feeds\",\"O3oNi5\":\"Email\",\"ATGYL1\":\"Email address\",\"pJJ0Vp\":\"Email Updated\",\"9Qs99X\":\"Email:\",\"96mted\":\"Enable this setting to only see replies between people you follow.\",\"YbIxza\":\"Enter the address of your provider:\",\"BfIgP6\":\"Enter the domain you want to use\",\"cHrOqs\":\"Enter the email you used to create your account. We'll send you a \\\"reset code\\\" so you can set a new password.\",\"xRPn3U\":\"Enter your email address\",\"+inPGm\":\"Enter your new email address below.\",\"T0KLp4\":\"Enter your username and password\",\"4BITzH\":\"Error:\",\"0PkE20\":\"Expand alt text\",\"/5K/KL\":\"Failed to load recommended feeds\",\"4yCy8i\":\"Feed offline\",\"N0CqyO\":\"Feed Preferences\",\"YirHq7\":\"Feedback\",\"2DoBvq\":\"Feeds\",\"I3iUBQ\":\"Feeds are created by users to curate content. Choose some feeds that you find interesting.\",\"2+6lmO\":\"Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information.\",\"Qzj1WT\":\"Finding similar accounts...\",\"QKSrQV\":\"Fine-tune the content you see on your home screen.\",\"r+KeyR\":\"Fine-tune the discussion threads.\",\"MKEPCY\":\"Follow\",\"AD4dxh\":\"Follow some\",\"Wezu5M\":\"Follow some users to get started. We can recommend you more users based on who you find interesting.\",\"YY2BTA\":\"Followed users only\",\"x5LEuB\":\"Followers\",\"NIjL2Y\":\"following\",\"y6sq5j\":\"Following\",\"p3UO/y\":\"Follows you\",\"5RhDkD\":\"For security reasons, we'll need to send a confirmation code to your email address.\",\"NJPhAO\":\"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.\",\"5bDfuq\":\"Forgot\",\"hEPLrs\":\"Forgot password\",\"dn8X5t\":\"Forgot Password\",\"U+kFad\":\"Gallery\",\"c3b0B0\":\"Get Started\",\"CKyk7Q\":\"Go back\",\"sr0UJD\":\"Go Back\",\"Rtp0y7\":\"Go to next\",\"Nf7oXL\":\"Handle\",\"c3XJ18\":\"Help\",\"uX/4+/\":\"Here is your app password.\",\"vLyv1R\":\"Hide\",\"qdOx2q\":\"Hide user list\",\"up7j9X\":\"Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.\",\"WTcLyw\":\"Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.\",\"/8MHCt\":\"Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.\",\"3zJH1g\":\"Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.\",\"yNNyhI\":\"Hmmm, we're having trouble finding this feed. It may have been deleted.\",\"i0qMbr\":\"Home\",\"sXZ8IU\":\"Home Feed Preferences\",\"yt7fhu\":\"Hosting provider\",\"s2xA6t\":\"Hosting provider address\",\"o+axy6\":\"I have a code\",\"wey2os\":\"I have my own domain\",\"WlEcKr\":\"If none are selected, suitable for all ages.\",\"VCk0rR\":\"Image alt text\",\"STGpNQ\":\"Image options\",\"6o7+En\":\"In Your Network\",\"dSKHAa\":\"Invalid username or password\",\"MFKlMB\":\"Invite\",\"F5MZVk\":\"Invite a Friend\",\"6KlkHI\":\"Invite code\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"Join the waitlist\",\"6iVTdm\":\"Join the waitlist.\",\"SNzppu\":\"Join Waitlist\",\"Dcq5kL\":\"Language selection\",\"pVhZHk\":\"Language Settings\",\"GAmD3h\":\"Languages\",\"NgeSlx\":\"Learn More\",\"rj0Lke\":\"Learn more about this warning\",\"kq2ga7\":\"Leave them all unchecked to see any language.\",\"QfDITI\":\"Leaving Bluesky\",\"Esfg1M\":\"Let's get your password reset!\",\"exYcTF\":\"Library\",\"1njn7W\":\"Light\",\"BvSY1i\":\"Like this feed\",\"8/ALSr\":\"Liked by\",\"FuZWua\":\"List Avatar\",\"8mjA4F\":\"List Name\",\"h16FyT\":\"Lists\",\"ujW4FW\":\"Load more posts\",\"7EHsGr\":\"Load new notifications\",\"VkLESX\":\"Load new posts\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"Local dev server\",\"cR9UpQ\":\"Login to account that is not listed\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"Make sure this is where you intend to go!\",\"zucql+\":\"Menu\",\"DzmsLV\":\"Moderation\",\"NTIbv4\":\"Moderation lists\",\"FIJUJb\":\"More feeds\",\"3Siwmw\":\"More options\",\"Y17r45\":\"More post options\",\"RA1KUZ\":\"Mute Account\",\"du0opt\":\"Mute accounts\",\"izOxJM\":\"Mute these accounts?\",\"jq7SjD\":\"Mute thread\",\"s22grX\":\"Muted accounts\",\"qUa+lV\":\"Muted Accounts\",\"gA0D9A\":\"Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private.\",\"1QJzM7\":\"Muting is private. Muted accounts can interact with you, but you will not see their posts or receive notifications from them.\",\"Mysqyf\":\"My Birthday\",\"6MBNS/\":\"My Feeds\",\"hKtWk2\":\"My Profile\",\"Ha6iBv\":\"My Saved Feeds\",\"6YtxFj\":\"Name\",\"8yolS6\":\"Never lose access to your followers and data.\",\"isRobC\":\"New\",\"2B7HLH\":\"New post\",\"FGrimz\":\"New Post\",\"hXzOVo\":\"Next\",\"EatZYJ\":\"Next image\",\"1UzENP\":\"No\",\"flmDTf\":\"No description\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"No results found for \\\"\",[\"query\"],\"\\\"\"],\"kA9DpB\":[\"No results found for \",[\"0\"]],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"Not Applicable\",\"iyUCYw\":\"Not Applicable.\",\"iDNBZe\":\"Notifications\",\"5GGAqz\":\"Oh no!\",\"UaXeX3\":\"Okay\",\"Cqo2D+\":\"One or more images is missing alt text.\",\"M/Q2aG\":\"Open navigation\",\"M5PuNq\":\"Opens configurable language settings\",\"eSqpax\":\"Opens modal for using custom domain\",\"vYwHHI\":\"Opens moderation settings\",\"0tHyB7\":\"Opens screen with all saved feeds\",\"nmRoY/\":\"Opens the app password settings page\",\"6e9Apv\":\"Opens the home feed preferences\",\"O87Dr/\":\"Opens the storybook page\",\"G+PVmg\":\"Opens the system log page\",\"Jqb7sy\":\"Opens the threads preferences\",\"b22AVl\":\"Other account\",\"n+HLOP\":\"Other service\",\"1PKxQ7\":\"Other...\",\"8F1i42\":\"Page not found\",\"8ZsakT\":\"Password\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"Password updated!\",\"VeZE5Q\":\"Pictures meant for adults.\",\"zgoxy5\":\"Pinned Feeds\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"Please confirm your email before changing it. This is a temporary requirement while email-updating tools are added, and it will soon be removed.\",\"9qpQ5O\":\"Please enter a unique name for this App Password or use our randomly generated one.\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"Please enter your password as well:\",\"y28hnO\":\"Post\",\"h5RcXU\":\"Post hidden\",\"r5zLS0\":\"Post language\",\"AzCucI\":\"Post Languages\",\"tJFPmV\":\"Post not found\",\"0+DQbr\":\"Potentially Misleading Link\",\"MHk+7g\":\"Previous image\",\"HeBcM5\":\"Primary Language\",\"x8iR7V\":\"Prioritize Your Follows\",\"rjGI/Q\":\"Privacy\",\"LcET2C\":\"Privacy Policy\",\"k1ifdL\":\"Processing...\",\"vERlcd\":\"Profile\",\"MrgqOW\":\"Protect your account by verifying your email.\",\"p1UmBX\":\"Public, shareable lists which can drive feeds.\",\"8HFFRQ\":\"Quote post\",\"+KrAHa\":\"Quote Post\",\"WlWsdE\":\"Ratios\",\"WEYdDv\":\"Recommended\",\"QNzcT3\":\"Recommended Feeds\",\"41UoJb\":\"Recommended Users\",\"t/YqKh\":\"Remove\",\"p/cRzf\":[\"Remove \",[\"0\"],\" from my feeds?\"],\"1O32oy\":\"Remove account\",\"W44VX5\":\"Remove feed\",\"Yy3FzB\":\"Remove from my feeds\",\"5ywtDz\":\"Remove image\",\"Dw/XUh\":\"Remove image preview\",\"TbDEfs\":\"Remove this feed from your saved feeds?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"Reply Filters\",\"lQWbAr\":[\"Report \",[\"collectionName\"]],\"bDHSjj\":\"Report Account\",\"NKmI9f\":\"Report feed\",\"6iwm2r\":\"Report List\",\"6IcSvC\":\"Report post\",\"mkude1\":\"Repost\",\"JOV5dR\":\"Repost or quote post\",\"0zb9FX\":\"Reposted by\",\"bqG37Z\":\"Request Change\",\"2d9VrZ\":\"Require alt text before posting\",\"8XIT+P\":\"Required for this provider\",\"vJgYMA\":\"Reset code\",\"xEL92I\":\"Reset onboarding state\",\"RfwZxd\":\"Reset password\",\"bee/Fw\":\"Reset preferences state\",\"wToeoz\":\"Resets the onboarding state\",\"nIU7qI\":\"Resets the preferences state\",\"6gRgw8\":\"Retry\",\"hAbYQa\":\"Retry change handle\",\"tfDRzk\":\"Save\",\"KV2YQQ\":\"Save alt text\",\"y3aU20\":\"Save changes\",\"IUwGEM\":\"Save Changes\",\"Xs07Tg\":\"Save handle change\",\"BckA7m\":\"Save image crop\",\"+K+JDj\":\"Saved Feeds\",\"A1taO8\":\"Search\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"Security Step Required\",\"cNzyJW\":\"See what's next\",\"L5sM7N\":\"Select Bluesky Social\",\"o3dwub\":\"Select from an existing account\",\"GGw2AK\":\"Select service\",\"vECNLO\":\"Select which languages you want your subscribed feeds to include. If none are selected, all languages will be shown.\",\"m5aabx\":\"Select your app language for the default text to display in the app\",\"TiiOza\":\"Select your preferred language for translations in your feed.\",\"vp9yIB\":\"Send Confirmation Email\",\"65dxv8\":\"Send email\",\"i/TzEU\":\"Send Email\",\"RoafuO\":\"Send feedback\",\"4cijjm\":\"Send Report\",\"V/e7nf\":\"Set new password\",\"gwsie4\":\"Set this setting to \\\"No\\\" to hide all quote posts from your feed. Reposts will still be visible.\",\"IZjC3J\":\"Set this setting to \\\"No\\\" to hide all replies from your feed.\",\"KIgU3l\":\"Set this setting to \\\"No\\\" to hide all reposts from your feed.\",\"zaAyrz\":\"Set this setting to \\\"Yes\\\" to show replies in a threaded view. This is an experimental feature.\",\"fQV2eE\":\"Set this setting to \\\"Yes\\\" to show samples of your saved feeds in your following feed. This is an experimental feature.\",\"Tz0i8g\":\"Settings\",\"HfWHhJ\":\"Sexual activity or erotic nudity.\",\"Z8lGw6\":\"Share\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"Share link\",\"8vETh9\":\"Show\",\"aWAdCb\":\"Show anyway\",\"NijgXr\":\"Show Posts from My Feeds\",\"T3Mt8m\":\"Show Quote Posts\",\"BlW8X/\":\"Show Replies\",\"X4GwDb\":\"Show replies by people you follow before all other replies.\",\"GiogzH\":\"Show Reposts\",\"fhY/fL\":\"Show users\",\"5lWFkC\":\"Sign in\",\"n1ekoW\":\"Sign In\",\"N9o7n5\":[\"Sign in as \",[\"0\"]],\"FT1MVS\":\"Sign in as...\",\"+UpfFC\":\"Sign into\",\"fcWrnU\":\"Sign out\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"Signed in as\",\"6Uau97\":\"Skip\",\"0o5BFH\":\"Sort Replies\",\"GH1Rgk\":\"Sort replies to the same post by:\",\"1DA6ap\":\"Square\",\"aKEHLj\":\"Staging\",\"tgEXwM\":\"Status page\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"Subscribe\",\"5z3ICN\":\"Subscribe to this list\",\"TVFyMD\":\"Suggested Follows\",\"XYLcNv\":\"Support\",\"VjWeLI\":\"Switch Account\",\"D+NlUC\":\"System\",\"fP8jTZ\":\"System log\",\"HF6Iah\":\"Tall\",\"4Y5H+g\":\"Terms\",\"xowcRf\":\"Terms of Service\",\"p8Iz39\":\"Text input field\",\"GlPXQJ\":\"The account will be able to interact with you after unblocking.\",\"o4M2MP\":\"The Community Guidelines have been moved to <0/>\",\"U42lKc\":\"The Copyright Policy has been moved to <0/>\",\"G4EksE\":\"The post may have been deleted.\",\"WNR9db\":\"The Privacy Policy has been moved to <0/>\",\"LbEbIk\":[\"The support form has been moved. If you need help, please<0/> or visit \",[\"HELP_DESK_URL\"],\" to get in touch with us.\"],\"FGbRSr\":\"The Terms of Service have been moved to\",\"yUqcy2\":\"There was an unexpected issue in the application. Please let us know if this happened to you!\",\"KRYn8w\":[\"This \",[\"screenDescription\"],\" has been flagged:\"],\"lm845B\":\"This information is not shared with other users.\",\"5Pvw/O\":\"This is important in case you ever need to change your email or reset your password.\",\"sQQfZ9\":\"This is the service that keeps you online.\",\"CvX8qs\":\"This link is taking you to the following website:\",\"WKrUVy\":\"This post has been deleted.\",\"qpCA5s\":\"This warning is only available for posts with media attached.\",\"u9ThjD\":\"Thread Preferences\",\"zmXsk5\":\"Threaded Mode\",\"1x30Qt\":\"Toggle dropdown\",\"KFXQEt\":\"Transformations\",\"pi8x/S\":\"Translate\",\"KDw4GX\":\"Try again\",\"nc4Wfd\":\"Unable to contact your service. Please check your Internet connection.\",\"tuS5Jz\":\"Unblock\",\"0VrZZv\":\"Unblock Account\",\"6pYY4t\":\"Undo repost\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"Unmute Account\",\"s12/Py\":\"Unmute thread\",\"vaz2uI\":[\"Update \",[\"displayName\"],\" in Lists\"],\"YXMY4w\":\"Update Available\",\"RXbEvi\":\"Updating...\",\"Vwkfp4\":\"Upload a text file to:\",\"jTdnU6\":\"Use app passwords to login to other Bluesky clients without giving full access to your account or password.\",\"CH1am9\":\"Use default provider\",\"ZG8UvP\":\"Use this to sign into the other app along with your handle.\",\"cKXwwI\":\"Used by:\",\"t4Yp4Z\":\"User handle\",\"8tsrUV\":\"User Lists\",\"nZx9mr\":\"Username or email address\",\"Sxm8rQ\":\"Users\",\"MBOY4U\":\"Verify email\",\"Ejyv0o\":\"Verify my email\",\"9czCrB\":\"Verify My Email\",\"ibSVGR\":\"Verify New Email\",\"nHsQde\":\"View debug entry\",\"47jzzd\":\"View the avatar\",\"wK4H1r\":\"Visit Site\",\"qjBGxf\":\"We're so excited to have you join us!\",\"1xpRAp\":\"We're sorry, but this content is not viewable without a Bluesky account.\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"We're sorry! We can't find the page you were looking for.\",\"meB+tZ\":\"Welcome to <0>Bluesky\",\"Mj7rl/\":[\"What is the issue with this \",[\"collectionName\"],\"?\"],\"3qn29J\":\"Which languages are used in this post?\",\"uawiGa\":\"Which languages would you like to see in your algorithmic feeds?\",\"I5S9ZE\":\"Wide\",\"y02THm\":\"Write post\",\"6ckZRB\":\"Write your reply\",\"l75CjT\":\"Yes\",\"STPj0e\":\"You can change hosting providers at any time.\",\"67nRLM\":\"You can now sign in with your new password.\",\"lIcbCU\":\"You don't have any invite codes yet! We'll send you some when you've been on Bluesky for a little longer.\",\"aFZZYi\":\"You don't have any pinned feeds.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"You don't have any saved feeds.\",\"RkXibf\":\"You have blocked the author or you have been blocked by the author.\",\"tCLJ9E\":\"You have no lists.\",\"soH9qC\":\"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.\",\"NDgp3i\":\"You have not created any app passwords yet. You can create one by pressing the button below.\",\"grqdXb\":\"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.\",\"RrDyEb\":\"You will receive an email with a \\\"reset code.\\\" Enter that code here, then enter your new password.\",\"gdRnT7\":\"Your account\",\"k7hmsH\":\"Your birth date\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"Your email has been saved! We'll be in touch soon.\",\"z2L+/9\":\"Your email has been updated but not verified. As a next step, please verify your new email.\",\"XZlIVw\":\"Your email has not yet been verified. This is an important security step which we recommend.\",\"qv9f4I\":\"Your full handle will be\",\"lvcqqG\":\"Your hosting provider\",\"Oqt/PG\":\"Your posts, likes, and blocks are public. Mutes are private.\",\"okRPtW\":\"Your profile\",\"MvWO9d\":\"Your user handle\"}")}; \ No newline at end of file diff --git a/src/locale/locales/fr/messages.po b/src/locale/locales/fr/messages.po index a84097d2..a1c2ff78 100644 --- a/src/locale/locales/fr/messages.po +++ b/src/locale/locales/fr/messages.po @@ -21,12 +21,6 @@ msgstr "" #~ msgid ". This warning is only available for posts with media attached." #~ msgstr "" -#: src/view/screens/Settings.tsx:410 -#: src/view/shell/desktop/RightNav.tsx:158 -#: src/view/shell/Drawer.tsx:527 -msgid "{0, plural, one {# invite code available} other {# invite codes available}}" -msgstr "" - #: src/view/com/modals/Repost.tsx:44 msgid "{0}" msgstr "" @@ -35,11 +29,6 @@ msgstr "" msgid "{0} {purposeLabel} List" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:141 -#: src/view/shell/Drawer.tsx:504 -msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" -msgstr "" - #: src/view/screens/Search/Search.tsx:86 msgid "{message}" msgstr "" @@ -61,12 +50,12 @@ msgid "A new version of the app is available. Please update to continue using th msgstr "" #: src/view/com/modals/EditImage.tsx:299 -#: src/view/screens/Settings.tsx:422 +#: src/view/screens/Settings.tsx:410 msgid "Accessibility" msgstr "" #: src/view/com/auth/login/LoginForm.tsx:161 -#: src/view/screens/Settings.tsx:289 +#: src/view/screens/Settings.tsx:288 msgid "Account" msgstr "" @@ -88,8 +77,8 @@ msgstr "" msgid "Add a user to this list" msgstr "" -#: src/view/screens/Settings.tsx:358 -#: src/view/screens/Settings.tsx:367 +#: src/view/screens/Settings.tsx:357 +#: src/view/screens/Settings.tsx:366 msgid "Add account" msgstr "" @@ -140,7 +129,7 @@ msgstr "" msgid "Adult Content" msgstr "" -#: src/view/screens/Settings.tsx:574 +#: src/view/screens/Settings.tsx:562 msgid "Advanced" msgstr "" @@ -172,7 +161,7 @@ msgstr "" msgid "App Language" msgstr "" -#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:582 msgid "App passwords" msgstr "" @@ -180,7 +169,7 @@ msgstr "" msgid "App Passwords" msgstr "" -#: src/view/screens/Settings.tsx:437 +#: src/view/screens/Settings.tsx:425 msgid "Appearance" msgstr "" @@ -205,7 +194,7 @@ msgid "Artistic or non-erotic nudity." msgstr "" #: src/view/com/auth/create/CreateAccount.tsx:145 -#: src/view/com/auth/login/ChooseAccountForm.tsx:122 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 #: src/view/com/auth/login/LoginForm.tsx:251 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 @@ -217,7 +206,7 @@ msgstr "" msgid "Back" msgstr "" -#: src/view/screens/Settings.tsx:466 +#: src/view/screens/Settings.tsx:454 msgid "Basics" msgstr "" @@ -226,7 +215,7 @@ msgstr "" msgid "Birthday" msgstr "" -#: src/view/screens/Settings.tsx:315 +#: src/view/screens/Settings.tsx:314 msgid "Birthday:" msgstr "" @@ -291,7 +280,7 @@ msgstr "" msgid "Bluesky.Social" msgstr "" -#: src/view/screens/Settings.tsx:723 +#: src/view/screens/Settings.tsx:711 msgid "Build version {0} {1}" msgstr "" @@ -359,12 +348,12 @@ msgstr "" msgid "Cancel waitlist signup" msgstr "" -#: src/view/screens/Settings.tsx:309 +#: src/view/screens/Settings.tsx:308 msgid "Change" msgstr "" -#: src/view/screens/Settings.tsx:606 -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:603 msgid "Change handle" msgstr "" @@ -408,19 +397,19 @@ msgstr "" msgid "Choose your password" msgstr "" -#: src/view/screens/Settings.tsx:699 +#: src/view/screens/Settings.tsx:687 msgid "Clear all legacy storage data" msgstr "" -#: src/view/screens/Settings.tsx:701 +#: src/view/screens/Settings.tsx:689 msgid "Clear all legacy storage data (restart after this)" msgstr "" -#: src/view/screens/Settings.tsx:711 +#: src/view/screens/Settings.tsx:699 msgid "Clear all storage data" msgstr "" -#: src/view/screens/Settings.tsx:713 +#: src/view/screens/Settings.tsx:701 msgid "Clear all storage data (restart after this)" msgstr "" @@ -561,7 +550,7 @@ msgstr "" msgid "Custom domain" msgstr "" -#: src/view/screens/Settings.tsx:620 +#: src/view/screens/Settings.tsx:608 msgid "Danger Zone" msgstr "" @@ -569,7 +558,7 @@ msgstr "" #~ msgid "Dark" #~ msgstr "" -#: src/view/screens/Settings.tsx:627 +#: src/view/screens/Settings.tsx:615 msgid "Delete account" msgstr "" @@ -591,7 +580,7 @@ msgstr "" msgid "Delete my account" msgstr "" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:625 msgid "Delete my account…" msgstr "" @@ -618,7 +607,7 @@ msgstr "" msgid "Dev Server" msgstr "" -#: src/view/screens/Settings.tsx:642 +#: src/view/screens/Settings.tsx:630 msgid "Developer Tools" msgstr "" @@ -677,7 +666,7 @@ msgid "Edit list details" msgstr "" #: src/view/screens/Feeds.tsx:367 -#: src/view/screens/SavedFeeds.tsx:75 +#: src/view/screens/SavedFeeds.tsx:85 msgid "Edit My Feeds" msgstr "" @@ -712,7 +701,7 @@ msgstr "" msgid "Email Updated" msgstr "" -#: src/view/screens/Settings.tsx:293 +#: src/view/screens/Settings.tsx:292 msgid "Email:" msgstr "" @@ -757,7 +746,7 @@ msgstr "" msgid "Failed to load recommended feeds" msgstr "" -#: src/view/screens/Feeds.tsx:558 +#: src/view/screens/Feeds.tsx:559 msgid "Feed offline" msgstr "" @@ -765,12 +754,12 @@ msgstr "" msgid "Feed Preferences" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:64 +#: src/view/shell/desktop/RightNav.tsx:65 #: src/view/shell/Drawer.tsx:411 msgid "Feedback" msgstr "" -#: src/view/screens/Feeds.tsx:474 +#: src/view/screens/Feeds.tsx:475 #: src/view/shell/bottom-bar/BottomBar.tsx:169 #: src/view/shell/desktop/LeftNav.tsx:342 #: src/view/shell/Drawer.tsx:328 @@ -782,7 +771,7 @@ msgstr "" msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." msgstr "" -#: src/view/screens/SavedFeeds.tsx:132 +#: src/view/screens/SavedFeeds.tsx:156 msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." msgstr "" @@ -884,7 +873,7 @@ msgstr "" msgid "Handle" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:93 +#: src/view/shell/desktop/RightNav.tsx:94 #: src/view/shell/Drawer.tsx:421 msgid "Help" msgstr "" @@ -901,6 +890,26 @@ msgstr "" msgid "Hide user list" msgstr "" +#: src/view/com/posts/FeedErrorMessage.tsx:101 +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:89 +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:95 +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:92 +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:86 +msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +msgstr "" + #: src/view/shell/bottom-bar/BottomBar.tsx:125 #: src/view/shell/desktop/LeftNav.tsx:306 #: src/view/shell/Drawer.tsx:275 @@ -908,9 +917,9 @@ msgstr "" msgid "Home" msgstr "" -#: src/view/com/pager/FeedsTabBarMobile.tsx:71 +#: src/view/com/pager/FeedsTabBarMobile.tsx:99 #: src/view/screens/PreferencesHomeFeed.tsx:95 -#: src/view/screens/Settings.tsx:486 +#: src/view/screens/Settings.tsx:474 msgid "Home Feed Preferences" msgstr "" @@ -953,12 +962,12 @@ msgstr "" msgid "Invalid username or password" msgstr "" -#: src/view/screens/Settings.tsx:386 +#: src/view/screens/Settings.tsx:385 msgid "Invite" msgstr "" #: src/view/com/modals/InviteCodes.tsx:91 -#: src/view/screens/Settings.tsx:374 +#: src/view/screens/Settings.tsx:373 msgid "Invite a Friend" msgstr "" @@ -991,7 +1000,7 @@ msgstr "" msgid "Language Settings" msgstr "" -#: src/view/screens/Settings.tsx:546 +#: src/view/screens/Settings.tsx:534 msgid "Languages" msgstr "" @@ -1031,7 +1040,7 @@ msgstr "" #~ msgid "Light" #~ msgstr "" -#: src/view/screens/ProfileFeed.tsx:625 +#: src/view/screens/ProfileFeed.tsx:626 msgid "Like this feed" msgstr "" @@ -1059,7 +1068,7 @@ msgstr "" msgid "Load more posts" msgstr "" -#: src/view/screens/Notifications.tsx:120 +#: src/view/screens/Notifications.tsx:130 msgid "Load new notifications" msgstr "" @@ -1075,11 +1084,11 @@ msgstr "" msgid "Local dev server" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:104 +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 msgid "Login to account that is not listed" msgstr "" -#: src/view/screens/ProfileFeed.tsx:477 +#: src/view/screens/ProfileFeed.tsx:478 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 "" @@ -1092,7 +1101,7 @@ msgid "Menu" msgstr "" #: src/view/screens/Moderation.tsx:51 -#: src/view/screens/Settings.tsx:568 +#: src/view/screens/Settings.tsx:556 #: src/view/shell/desktop/LeftNav.tsx:400 #: src/view/shell/Drawer.tsx:346 #: src/view/shell/Drawer.tsx:347 @@ -1108,7 +1117,7 @@ msgid "More feeds" msgstr "" #: src/view/com/profile/ProfileHeader.tsx:506 -#: src/view/screens/ProfileFeed.tsx:367 +#: src/view/screens/ProfileFeed.tsx:368 #: src/view/screens/ProfileList.tsx:506 msgid "More options" msgstr "" @@ -1161,7 +1170,7 @@ msgstr "" msgid "My Profile" msgstr "" -#: src/view/screens/Settings.tsx:525 +#: src/view/screens/Settings.tsx:513 msgid "My Saved Feeds" msgstr "" @@ -1179,9 +1188,9 @@ msgid "New" msgstr "" #: src/view/com/feeds/FeedPage.tsx:187 -#: src/view/screens/Feeds.tsx:509 -#: src/view/screens/Profile.tsx:380 -#: src/view/screens/ProfileFeed.tsx:447 +#: src/view/screens/Feeds.tsx:510 +#: src/view/screens/Profile.tsx:381 +#: src/view/screens/ProfileFeed.tsx:448 #: src/view/screens/ProfileList.tsx:199 #: src/view/screens/ProfileList.tsx:231 #: src/view/shell/desktop/LeftNav.tsx:255 @@ -1212,7 +1221,7 @@ msgstr "" msgid "No" msgstr "" -#: src/view/screens/ProfileFeed.tsx:618 +#: src/view/screens/ProfileFeed.tsx:619 #: src/view/screens/ProfileList.tsx:632 msgid "No description" msgstr "" @@ -1221,7 +1230,7 @@ msgstr "" msgid "No result" msgstr "" -#: src/view/screens/Feeds.tsx:451 +#: src/view/screens/Feeds.tsx:452 msgid "No results found for \"{query}\"" msgstr "" @@ -1246,8 +1255,8 @@ msgstr "" msgid "Not Applicable." msgstr "" -#: src/view/screens/Notifications.tsx:87 -#: src/view/screens/Notifications.tsx:111 +#: src/view/screens/Notifications.tsx:97 +#: src/view/screens/Notifications.tsx:121 #: src/view/shell/bottom-bar/BottomBar.tsx:196 #: src/view/shell/desktop/LeftNav.tsx:364 #: src/view/shell/Drawer.tsx:299 @@ -1267,52 +1276,47 @@ msgstr "" msgid "One or more images is missing alt text." msgstr "" -#: src/view/com/pager/FeedsTabBarMobile.tsx:51 +#: src/view/com/pager/FeedsTabBarMobile.tsx:79 msgid "Open navigation" msgstr "" -#: src/view/screens/Settings.tsx:538 +#: src/view/screens/Settings.tsx:526 msgid "Opens configurable language settings" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:146 -#: src/view/shell/Drawer.tsx:509 -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:563 +#: src/view/screens/Settings.tsx:551 msgid "Opens moderation settings" msgstr "" -#: src/view/screens/Settings.tsx:519 +#: src/view/screens/Settings.tsx:507 msgid "Opens screen with all saved feeds" msgstr "" -#: src/view/screens/Settings.tsx:586 +#: src/view/screens/Settings.tsx:574 msgid "Opens the app password settings page" msgstr "" -#: src/view/screens/Settings.tsx:478 +#: src/view/screens/Settings.tsx:466 msgid "Opens the home feed preferences" msgstr "" -#: src/view/screens/Settings.tsx:669 +#: src/view/screens/Settings.tsx:657 msgid "Opens the storybook page" msgstr "" -#: src/view/screens/Settings.tsx:649 +#: src/view/screens/Settings.tsx:637 msgid "Opens the system log page" msgstr "" -#: src/view/screens/Settings.tsx:499 +#: src/view/screens/Settings.tsx:487 msgid "Opens the threads preferences" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:109 +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" msgstr "" @@ -1349,7 +1353,7 @@ msgstr "" msgid "Pictures meant for adults." msgstr "" -#: src/view/screens/SavedFeeds.tsx:79 +#: src/view/screens/SavedFeeds.tsx:89 msgid "Pinned Feeds" msgstr "" @@ -1415,7 +1419,7 @@ msgstr "" msgid "Prioritize Your Follows" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:75 +#: src/view/shell/desktop/RightNav.tsx:76 msgid "Privacy" msgstr "" @@ -1434,7 +1438,7 @@ msgstr "" msgid "Profile" msgstr "" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:782 msgid "Protect your account by verifying your email." msgstr "" @@ -1476,7 +1480,7 @@ msgstr "" msgid "Remove" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:92 +#: src/view/com/feeds/FeedSourceCard.tsx:108 msgid "Remove {0} from my feeds?" msgstr "" @@ -1484,11 +1488,11 @@ msgstr "" msgid "Remove account" msgstr "" -#: src/view/com/posts/FeedErrorMessage.tsx:106 +#: src/view/com/posts/FeedErrorMessage.tsx:118 msgid "Remove feed" msgstr "" -#: src/view/com/feeds/FeedSourceCard.tsx:91 +#: src/view/com/feeds/FeedSourceCard.tsx:107 #: src/view/screens/ProfileFeed.tsx:278 msgid "Remove from my feeds" msgstr "" @@ -1501,7 +1505,7 @@ msgstr "" msgid "Remove image preview" msgstr "" -#: src/view/com/posts/FeedErrorMessage.tsx:107 +#: src/view/com/posts/FeedErrorMessage.tsx:119 msgid "Remove this feed from your saved feeds?" msgstr "" @@ -1565,7 +1569,7 @@ msgstr "" msgid "Reset code" msgstr "" -#: src/view/screens/Settings.tsx:691 +#: src/view/screens/Settings.tsx:679 msgid "Reset onboarding state" msgstr "" @@ -1573,15 +1577,15 @@ msgstr "" msgid "Reset password" msgstr "" -#: src/view/screens/Settings.tsx:681 +#: src/view/screens/Settings.tsx:669 msgid "Reset preferences state" msgstr "" -#: src/view/screens/Settings.tsx:689 +#: src/view/screens/Settings.tsx:677 msgid "Resets the onboarding state" msgstr "" -#: src/view/screens/Settings.tsx:679 +#: src/view/screens/Settings.tsx:667 msgid "Resets the preferences state" msgstr "" @@ -1628,7 +1632,7 @@ msgstr "" msgid "Save image crop" msgstr "" -#: src/view/screens/SavedFeeds.tsx:105 +#: src/view/screens/SavedFeeds.tsx:122 msgid "Saved Feeds" msgstr "" @@ -1726,7 +1730,7 @@ msgstr "" 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:280 +#: src/view/screens/Settings.tsx:279 #: src/view/shell/desktop/LeftNav.tsx:436 #: src/view/shell/Drawer.tsx:380 #: src/view/shell/Drawer.tsx:381 @@ -1751,7 +1755,7 @@ msgstr "" #~ msgid "Share link" #~ msgstr "" -#: src/view/screens/Settings.tsx:319 +#: src/view/screens/Settings.tsx:318 msgid "Show" msgstr "" @@ -1795,11 +1799,11 @@ msgstr "" msgid "Sign In" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:37 +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 msgid "Sign in as {0}" msgstr "" -#: src/view/com/auth/login/ChooseAccountForm.tsx:94 +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 #: src/view/com/auth/login/Login.tsx:100 msgid "Sign in as..." msgstr "" @@ -1823,7 +1827,7 @@ msgstr "" msgid "Sign up or sign in to join the conversation" msgstr "" -#: src/view/screens/Settings.tsx:330 +#: src/view/screens/Settings.tsx:329 msgid "Signed in as" msgstr "" @@ -1848,11 +1852,11 @@ msgstr "" msgid "Staging" msgstr "" -#: src/view/screens/Settings.tsx:735 +#: src/view/screens/Settings.tsx:723 msgid "Status page" msgstr "" -#: src/view/screens/Settings.tsx:671 +#: src/view/screens/Settings.tsx:659 msgid "Storybook" msgstr "" @@ -1881,7 +1885,7 @@ msgstr "" #~ msgid "System" #~ msgstr "" -#: src/view/screens/Settings.tsx:651 +#: src/view/screens/Settings.tsx:639 msgid "System log" msgstr "" @@ -1889,7 +1893,7 @@ msgstr "" msgid "Tall" msgstr "" -#: src/view/shell/desktop/RightNav.tsx:84 +#: src/view/shell/desktop/RightNav.tsx:85 msgid "Terms" msgstr "" @@ -1962,7 +1966,7 @@ msgid "This warning is only available for posts with media attached." msgstr "" #: src/view/screens/PreferencesThreads.tsx:53 -#: src/view/screens/Settings.tsx:508 +#: src/view/screens/Settings.tsx:496 msgid "Thread Preferences" msgstr "" @@ -2069,15 +2073,15 @@ msgstr "" msgid "Users" msgstr "" -#: src/view/screens/Settings.tsx:755 +#: src/view/screens/Settings.tsx:743 msgid "Verify email" msgstr "" -#: src/view/screens/Settings.tsx:780 +#: src/view/screens/Settings.tsx:768 msgid "Verify my email" msgstr "" -#: src/view/screens/Settings.tsx:789 +#: src/view/screens/Settings.tsx:777 msgid "Verify My Email" msgstr "" @@ -2102,6 +2106,10 @@ msgstr "" msgid "We're so excited to have you join us!" msgstr "" +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "We're sorry, but this content is not viewable without a Bluesky account." +msgstr "" + #: src/view/screens/Search/Search.tsx:236 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" @@ -2157,7 +2165,7 @@ msgstr "" 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:92 +#: src/view/screens/SavedFeeds.tsx:102 msgid "You don't have any pinned feeds." msgstr "" @@ -2165,7 +2173,7 @@ msgstr "" msgid "You don't have any saved feeds!" msgstr "" -#: src/view/screens/SavedFeeds.tsx:118 +#: src/view/screens/SavedFeeds.tsx:135 msgid "You don't have any saved feeds." msgstr "" @@ -2228,12 +2236,6 @@ msgstr "" msgid "Your hosting provider" msgstr "" -#: src/view/screens/Settings.tsx:405 -#: src/view/shell/desktop/RightNav.tsx:127 -#: src/view/shell/Drawer.tsx:523 -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 "" diff --git a/src/locale/locales/hi/messages.js b/src/locale/locales/hi/messages.js index 559863dc..92c06399 100644 --- a/src/locale/locales/hi/messages.js +++ b/src/locale/locales/hi/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- फ़ीड का अंत -\",\"EtUMsZ\":\"यह चेतावनी केवल मीडिया वाले पोस्ट के लिए उपलब्ध है।\",\"ebOBhv\":[[\"0\",\"plural\",{\"one\":[\"#\",\" invite code available\"],\"other\":[\"#\",\" invite codes available\"]}]],\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" सूची\"],\"zgN03j\":[[\"invitesAvailable\",\"plural\",{\"one\":[\"Invite codes: \",\"#\",\" available\"],\"other\":[\"Invite codes: \",\"#\",\" available\"]}]],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>अपना<1>पसंदीदा<2>फ़ीड चुनें\",\"F657la\":\"<0>कुछ<1>पसंदीदा उपयोगकर्ताओं<2>का अनुसरण करें\",\"6RmyWt\":\"<0>इधर आपका ऐप पासवर्ड है। इसे अपने हैंडल के साथ दूसरे ऐप में साइन करने के लिए उपयोग करें।।\",\"XCTqGE\":\"ऐप का एक नया संस्करण उपलब्ध है. कृपया ऐप का उपयोग जारी रखने के लिए अपडेट करें।\",\"AnNF5e\":\"प्रवेर्शयोग्यता\",\"AeXO77\":\"अकाउंट\",\"4WY4MD\":\"अकाउंट के विकल्प\",\"m16xKo\":\"ऐड करो\",\"fBBX+K\":\"सामग्री चेतावनी जोड़ें\",\"JU3hs2\":\"इस सूची में किसी को जोड़ें\",\"MPPZ54\":\"अकाउंट जोड़ें\",\"LkA8jz\":\"इस फ़ोटो में विवरण जोड़ें\",\"Z8idyM\":\"विवरण जोड़ें\",\"AoXl11\":\"रिपोर्ट करने के लिए विवरण जोड़ें\",\"iE6B/9\":\"लिंक कार्ड जोड़ें\",\"EXHdP1\":\"लिंक कार्ड जोड़ें:\",\"x6laaL\":\"अपने डोमेन में निम्नलिखित DNS रिकॉर्ड जोड़ें:\",\"UmzMP4\":\"सूचियों में जोड़ें\",\"hCrQ0L\":\"इस फ़ीड को सहेजें\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"पसंद की संख्या को समायोजित करें उत्तर को आपके फ़ीड में दिखाया जाना चाहिए।।\",\"qLa52r\":\"वयस्क सामग्री\",\"sxkWRg\":\"विकसित\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"वैकल्पिक पाठ\",\"0QlT7/\":\"ऑल्ट टेक्स्ट अंधा और कम दृश्य लोगों के लिए छवियों का वर्णन करता है, और हर किसी को संदर्भ देने में मदद करता है।।\",\"woXbjq\":[[\"0\"],\" को ईमेल भेजा गया है। इसमें एक OTP कोड शामिल है जिसे आप नीचे दर्ज कर सकते हैं।।\"],\"Fon2dK\":[[\"0\"],\" को ईमेल भेजा गया है। इसमें एक OTP कोड शामिल है जिसे आप नीचे दर्ज कर सकते हैं।।\"],\"HZFm5R\":\"और\",\"fdjKGe\":\"ऐप भाषा\",\"SMmUnj\":\"ऐप पासवर्ड\",\"8q4WlH\":\"ऐप पासवर्ड\",\"aAIQg2\":\"दिखावट\",\"SSDZ+T\":[\"क्या आप वाकई ऐप पासवर्ड \\\"\",[\"name\"],\"\\\" हटाना चाहते हैं?\"],\"0BIeIs\":\"क्या आप वाकई इस ड्राफ्ट को हटाना करना चाहेंगे?\",\"6foA8n\":\"क्या आप वास्तव में इसे करना चाहते हैं?\",\"/mSd6b\":\"क्या आप वास्तव में इसे करना चाहते हैं? इसे असंपादित नहीं किया जा सकता है।\",\"EbvWd3\":\"कलात्मक या गैर-कामुक नग्नता।।\",\"iH8pgl\":\"वापस\",\"ehOkF+\":\"मूल बातें\",\"+gCI2a\":\"जन्मदिन\",\"pieVBA\":\"जन्मदिन:\",\"m1dqxu\":\"खाता ब्लॉक करें\",\"ffIfdM\":\"खाता ब्लॉक करें\",\"fdYcMy\":\"खाता ब्लॉक करें?\",\"KWykPE\":\"ब्लॉक किए गए खाते\",\"JuqQpF\":\"ब्लॉक किए गए खाते\",\"HG4qt4\":\"अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।\",\"8LNSUt\":\"अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते। आप उनकी सामग्री नहीं देख पाएंगे और उन्हें आपकी सामग्री देखने से रोका जाएगा।\",\"HFCE4A\":\"ब्लॉक पोस्ट।\",\"zl+QbX\":\"अवरोधन सार्वजनिक है. अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky लचीला है।।\",\"odLrdl\":\"Bluesky खुला है।।\",\"/LsWK4\":\"Bluesky सार्वजनिक है।।\",\"C50OGr\":\"ब्लूस्की एक स्वस्थ समुदाय बनाने के लिए आमंत्रित करता है। यदि आप किसी को आमंत्रित नहीं करते हैं, तो आप प्रतीक्षा सूची के लिए साइन अप कर सकते हैं और हम जल्द ही एक भेज देंगे।।\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"कैमरा\",\"JGGrPC\":\"केवल अक्षर, संख्या, रिक्त स्थान, डैश और अंडरस्कोर हो सकते हैं। कम से कम 4 अक्षर लंबा होना चाहिए, लेकिन 32 अक्षरों से अधिक लंबा नहीं होना चाहिए।।\",\"dEgA5A\":\"कैंसिल\",\"aMH9rr\":\"अकाउंट बंद मत करो\",\"kc3E4R\":\"ऑल्ट टेक्स्ट मत जोड़ें\",\"wg4LHQ\":\"नाम मत बदलो\",\"hFL1Li\":\"तस्वीर को क्रॉप मत करो\",\"tijH8t\":\"प्रोफ़ाइल संपादन मत करो\",\"Qe4C/d\":\"कोटे पोस्ट मत करो\",\"5TviPn\":\"खोज मत करो\",\"nss3UV\":\"प्रतीक्षा सूची पंजीकरण मत करो\",\"o+XJ9D\":\"परिवर्तन\",\"pQco5R\":\"हैंडल बदलें\",\"Q5e1U/\":\"हैंडल बदलें\",\"a3NAfL\":\"मेरा ईमेल बदलें\",\"4vatyk\":\"मेरा ईमेल बदलें\",\"Yn3C90\":\"कुछ अनुशंसित फ़ीड देखें. उन्हें अपनी पिन की गई फ़ीड की सूची में जोड़ने के लिए + टैप करें।\",\"ioZXIH\":\"कुछ अनुशंसित उपयोगकर्ताओं की जाँच करें। ऐसे ही उपयोगकर्ता देखने के लिए उनका अनुसरण करें।\",\"/+X+/K\":\"नीचे प्रवेश करने के लिए OTP कोड के साथ एक ईमेल के लिए अपने इनबॉक्स की जाँच करें:\",\"Rt502e\":\"सेवा चुनें\",\"/L45sc\":\"उन एल्गोरिदम का चयन करें जो कस्टम फीड्स के साथ अपने अनुभव को शक्ति देते हैं।।\",\"Wk8hkn\":\"अपना पासवर्ड चुनें\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"खोज क्वेरी साफ़ करें\",\"flH7u/\":\"चेतावनी को बंद करो\",\"hYmnbk\":\"बंद करो\",\"47L1V1\":\"छवि बंद करें\",\"l49ujN\":\"छवि बंद करें\",\"UryHFO\":\"नेविगेशन पाद बंद करें\",\"KHzDTk\":\"समुदाय दिशानिर्देश\",\"o8UUti\":\"जवाब लिखो\",\"7VpPHA\":\"हो गया\",\"q8upsf\":\"बदलाव की पुष्टि करें\",\"8pNKIr\":\"सामग्री भाषा सेटिंग्स की पुष्टि करें\",\"tGg8Kt\":\"खाते को हटा दें\",\"ioZOzk\":\"OTP कोड\",\"J28zul\":\"कनेक्टिंग ..।\",\"l879p1\":\"सामग्री फ़िल्टरिंग\",\"m8j6up\":\"सामग्री फ़िल्टरिंग\",\"/PlAsF\":\"सामग्री भाषा\",\"cogwXi\":\"सामग्री चेतावनी\",\"FG7AQv\":\"सामग्री चेतावनी\",\"xGVfLh\":\"आगे बढ़ें\",\"6V3Ea3\":\"कॉपी कर ली\",\"he3ygx\":\"कॉपी\",\"iQgJaz\":\"पोस्ट टेक्स्ट कॉपी करें\",\"u40k/o\":\"कॉपीराइट नीति\",\"7wWvgo\":\"फ़ीड लोड नहीं कर सकता\",\"8NNr/O\":\"सूची लोड नहीं कर सकता\",\"mpt9T+\":\"नया खाता बनाएं\",\"IS0nrP\":\"खाता बनाएँ\",\"6HbhpU\":\"नया खाता बनाएं\",\"MXSt4t\":[\"बनाया गया \",[\"0\"]],\"GAD3Dx\":\"कस्टम डोमेन\",\"ZQKLI1\":\"खतरा क्षेत्र\",\"pvnfJD\":\"डार्क मोड\",\"ZDGm40\":\"खाता हटाएं\",\"vzX5FB\":\"खाता हटाएं\",\"gUEtxf\":\"अप्प पासवर्ड हटाएं\",\"84uE/A\":\"सूची हटाएँ\",\"ktknoE\":\"मेरा खाता हटाएं\",\"szz0+N\":\"मेरा खाता हटाएं…\",\"04G5Az\":\"पोस्ट को हटाएं\",\"FbPNuJ\":\"इस पोस्ट को डीलीट करें?\",\"u+1OHY\":\"यह पोस्ट मिटाई जा चुकी है\",\"Nu4oKW\":\"विवरण\",\"dacKHE\":\"देव सर्वर\",\"2ygkE8\":\"डेवलपर उपकरण\",\"bzSI52\":\"Discard\",\"BryYJR\":\"ड्राफ्ट हटाएं\",\"pbLwal\":\"नए फ़ीड की खोज करें\",\"pfa8F0\":\"नाम\",\"0gS7M5\":\"प्रदर्शन का नाम\",\"iZ5pMB\":\"डोमेन सत्यापित!\",\"DPfwMq\":\"खत्म\",\"zT97vP\":[\"खत्म \",[\"extraText\"]],\"4uwlSD\":\"प्रत्येक कोड एक बार काम करता है। आपको समय-समय पर अधिक आमंत्रण कोड प्राप्त होंगे।\",\"XQFMOm\":\"छवि संपादित करें\",\"S7M0uU\":\"सूची विवरण संपादित करें\",\"cLmurE\":\"मेरी फ़ीड संपादित करें\",\"bRZ5XW\":\"मेरी प्रोफ़ाइल संपादित करें\",\"9OpVZg\":\"मेरी प्रोफ़ाइल संपादित करें\",\"QJQd1J\":\"मेरी प्रोफ़ाइल संपादित करें\",\"Jn7kox\":\"एडिट सेव्ड फीड\",\"O3oNi5\":\"ईमेल\",\"ATGYL1\":\"ईमेल\",\"pJJ0Vp\":\"ईमेल अपडेट किया गया\",\"9Qs99X\":\"ईमेल:\",\"96mted\":\"इस सेटिंग को केवल उन लोगों के बीच जवाब देखने में सक्षम करें जिन्हें आप फॉलो करते हैं।।\",\"YbIxza\":\"अपने प्रदाता का पता दर्ज करें:\",\"BfIgP6\":\"आप जिस डोमेन का उपयोग करना चाहते हैं उसे दर्ज करें\",\"cHrOqs\":\"वह ईमेल दर्ज करें जिसका उपयोग आपने अपना खाता बनाने के लिए किया था। हम आपको एक \\\"reset code\\\" भेजेंगे ताकि आप एक नया पासवर्ड सेट कर सकें।\",\"xRPn3U\":\"अपना ईमेल पता दर्ज करें\",\"+inPGm\":\"नीचे अपना नया ईमेल पता दर्ज करें।।\",\"T0KLp4\":\"अपने यूज़रनेम और पासवर्ड दर्ज करें\",\"4BITzH\":\"Error:\",\"0PkE20\":\"ऑल्ट टेक्स्ट\",\"/5K/KL\":\"अनुशंसित फ़ीड लोड करने में विफल\",\"4yCy8i\":\"फ़ीड ऑफ़लाइन है\",\"N0CqyO\":\"फ़ीड प्राथमिकता\",\"YirHq7\":\"प्रतिक्रिया\",\"2DoBvq\":\"सभी फ़ीड\",\"I3iUBQ\":\"सामग्री को व्यवस्थित करने के लिए उपयोगकर्ताओं द्वारा फ़ीड बनाए जाते हैं। कुछ फ़ीड चुनें जो आपको दिलचस्प लगें।\",\"2+6lmO\":\"फ़ीड कस्टम एल्गोरिदम हैं जिन्हें उपयोगकर्ता थोड़ी कोडिंग विशेषज्ञता के साथ बनाते हैं। <0/> अधिक जानकारी के लिए.\",\"Qzj1WT\":\"मिलते-जुलते खाते ढूँढना\",\"QKSrQV\":\"अपने मुख्य फ़ीड की स्क्रीन पर दिखाई देने वाली सामग्री को ठीक करें।।\",\"r+KeyR\":\"चर्चा धागे को ठीक-ट्यून करें।।\",\"MKEPCY\":\"फॉलो\",\"Wezu5M\":\"आरंभ करने के लिए कुछ उपयोगकर्ताओं का अनुसरण करें. आपको कौन दिलचस्प लगता है, इसके आधार पर हम आपको और अधिक उपयोगकर्ताओं की अनुशंसा कर सकते हैं।\",\"YY2BTA\":\"केवल वे यूजर को फ़ॉलो किया गया\",\"x5LEuB\":\"यह यूजर आपका फ़ोलो करता है\",\"NIjL2Y\":\"फोल्लोविंग\",\"y6sq5j\":\"फोल्लोविंग\",\"p3UO/y\":\"यह यूजर आपका फ़ोलो करता है\",\"5RhDkD\":\"सुरक्षा कारणों के लिए, हमें आपके ईमेल पते पर एक OTP कोड भेजने की आवश्यकता होगी।।\",\"NJPhAO\":\"सुरक्षा कारणों के लिए, आप इसे फिर से देखने में सक्षम नहीं होंगे। यदि आप इस पासवर्ड को खो देते हैं, तो आपको एक नया उत्पन्न करना होगा।।\",\"5bDfuq\":\"भूल\",\"hEPLrs\":\"पासवर्ड भूल गए\",\"dn8X5t\":\"पासवर्ड भूल गए\",\"U+kFad\":\"गैलरी\",\"c3b0B0\":\"प्रारंभ करें\",\"CKyk7Q\":\"वापस जाओ\",\"sr0UJD\":\"वापस जाओ\",\"Rtp0y7\":\"अगला\",\"Nf7oXL\":\"हैंडल\",\"c3XJ18\":\"सहायता\",\"uX/4+/\":\"यहां आपका ऐप पासवर्ड है.\",\"vLyv1R\":\"इसे छिपाएं\",\"qdOx2q\":\"उपयोगकर्ता सूची छुपाएँ\",\"i0qMbr\":\"होम फीड\",\"sXZ8IU\":\"होम फ़ीड प्राथमिकताएं\",\"yt7fhu\":\"होस्टिंग प्रदाता\",\"s2xA6t\":\"होस्टिंग प्रदाता पता\",\"o+axy6\":\"मेरे पास एक OTP कोड है\",\"wey2os\":\"मेरे पास अपना डोमेन है\",\"WlEcKr\":\"यदि किसी को चुना जाता है, तो सभी उम्र के लिए उपयुक्त है।।\",\"VCk0rR\":\"छवि alt पाठ\",\"STGpNQ\":\"छवि विकल्प\",\"6o7+En\":\"आपके नेटवर्क में\",\"dSKHAa\":\"अवैध उपयोगकर्ता नाम या पासवर्ड\",\"MFKlMB\":\"आमंत्रण भेजो\",\"F5MZVk\":\"एक दोस्त को आमंत्रित करें\",\"6KlkHI\":\"आमंत्रण कोड\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"प्रतीक्षा सूची में शामिल हों\",\"6iVTdm\":\"प्रतीक्षा सूची में शामिल हों।।\",\"SNzppu\":\"वेटरलिस्ट में शामिल हों\",\"Dcq5kL\":\"अपनी भाषा चुने\",\"pVhZHk\":\"भाषा सेटिंग्स\",\"GAmD3h\":\"भाषा\",\"NgeSlx\":\"अधिक जानें\",\"rj0Lke\":\"इस चेतावनी के बारे में अधिक जानें\",\"kq2ga7\":\"उन्हें किसी भी भाषा को देखने के लिए अनचेक छोड़ दें।।\",\"QfDITI\":\"लीविंग Bluesky\",\"Esfg1M\":\"चलो अपना पासवर्ड रीसेट करें!\",\"exYcTF\":\"चित्र पुस्तकालय\",\"1njn7W\":\"लाइट मोड\",\"BvSY1i\":\"इस फ़ीड को लाइक करो\",\"8/ALSr\":\"इन यूजर ने लाइक किया है\",\"FuZWua\":\"सूची अवतार\",\"8mjA4F\":\"सूची का नाम\",\"h16FyT\":\"सूची\",\"ujW4FW\":\"अधिक पोस्ट लोड करें\",\"7EHsGr\":\"नई सूचनाएं लोड करें\",\"VkLESX\":\"नई पोस्ट लोड करें\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"स्थानीय देव सर्वर\",\"cR9UpQ\":\"उस खाते में लॉग इन करें जो सूचीबद्ध नहीं है\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"यह सुनिश्चित करने के लिए कि आप कहाँ जाना चाहते हैं!\",\"zucql+\":\"मेनू\",\"DzmsLV\":\"मॉडरेशन\",\"NTIbv4\":\"मॉडरेशन सूचियाँ\",\"FIJUJb\":\"अधिक फ़ीड\",\"3Siwmw\":\"अधिक विकल्प\",\"Y17r45\":\"पोस्ट विकल्प\",\"RA1KUZ\":\"खाता म्यूट करें\",\"du0opt\":\"खातों को म्यूट करें\",\"izOxJM\":\"इन खातों को म्यूट करें?\",\"jq7SjD\":\"थ्रेड म्यूट करें\",\"s22grX\":\"म्यूट किए गए खाते\",\"qUa+lV\":\"म्यूट किए गए खाते\",\"gA0D9A\":\"म्यूट किए गए खातों की पोस्ट आपके फ़ीड और आपकी सूचनाओं से हटा दी जाती हैं। म्यूट पूरी तरह से निजी हैं.\",\"1QJzM7\":\"म्यूट करना निजी है. म्यूट किए गए खाते आपके साथ इंटरैक्ट कर सकते हैं, लेकिन आप उनकी पोस्ट नहीं देखेंगे या उनसे सूचनाएं प्राप्त नहीं करेंगे।\",\"Mysqyf\":\"जन्मदिन\",\"6MBNS/\":\"मेरी फ़ीड\",\"hKtWk2\":\"मेरी प्रोफाइल\",\"Ha6iBv\":\"मेरी फ़ीड\",\"6YtxFj\":\"नाम\",\"8yolS6\":\"अपने फ़ॉलोअर्स और डेटा तक पहुंच कभी न खोएं।\",\"isRobC\":\"नया\",\"2B7HLH\":\"नई पोस्ट\",\"FGrimz\":\"नई पोस्ट\",\"hXzOVo\":\"अगला\",\"EatZYJ\":\"अगली फोटो\",\"1UzENP\":\"नहीं\",\"flmDTf\":\"कोई विवरण नहीं\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"\\\"\",[\"query\"],\"\\\" के लिए कोई परिणाम नहीं मिला\"],\"kA9DpB\":[[\"0\"],\" के लिए कोई परिणाम नहीं मिला\"],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"लागू नहीं\",\"iyUCYw\":\"लागू नहीं।\",\"iDNBZe\":\"सूचनाएं\",\"5GGAqz\":\"अरे नहीं!\",\"UaXeX3\":\"ठीक है\",\"Cqo2D+\":\"एक या अधिक छवियाँ alt पाठ याद आती हैं।।\",\"M/Q2aG\":\"ओपन नेविगेशन\",\"M5PuNq\":\"भाषा सेटिंग्स खोलें\",\"S67TOE\":\"Opens list of invite codes\",\"eSqpax\":\"कस्टम डोमेन का उपयोग करने के लिए मोडल खोलें\",\"vYwHHI\":\"मॉडरेशन सेटिंग्स खोलें\",\"0tHyB7\":\"सभी बचाया फ़ीड के साथ स्क्रीन खोलें\",\"nmRoY/\":\"ऐप पासवर्ड सेटिंग पेज खोलें\",\"6e9Apv\":\"होम फीड वरीयताओं को खोलता है\",\"O87Dr/\":\"स्टोरीबुक पेज खोलें\",\"G+PVmg\":\"सिस्टम लॉग पेज खोलें\",\"Jqb7sy\":\"धागे वरीयताओं को खोलता है\",\"b22AVl\":\"अन्य खाता\",\"n+HLOP\":\"अन्य सेवा\",\"1PKxQ7\":\"अन्य..।\",\"8F1i42\":\"पृष्ठ नहीं मिला\",\"8ZsakT\":\"पासवर्ड\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"पासवर्ड अद्यतन!\",\"VeZE5Q\":\"चित्र वयस्कों के लिए थे।।\",\"zgoxy5\":\"पिन किया गया फ़ीड\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"इसे बदलने से पहले कृपया अपने ईमेल की पुष्टि करें। यह एक अस्थायी आवश्यकता है जबकि ईमेल-अपडेटिंग टूल जोड़ा जाता है, और इसे जल्द ही हटा दिया जाएगा।।\",\"9qpQ5O\":\"कृपया इस ऐप पासवर्ड के लिए एक अद्वितीय नाम दर्ज करें या हमारे यादृच्छिक रूप से उत्पन्न एक का उपयोग करें।।\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"कृपया अपना पासवर्ड भी दर्ज करें:\",\"y28hnO\":\"पोस्ट\",\"h5RcXU\":\"छुपा पोस्ट\",\"r5zLS0\":\"पोस्ट भाषा\",\"AzCucI\":\"पोस्ट भाषा\",\"tJFPmV\":\"पोस्ट नहीं मिला\",\"0+DQbr\":\"शायद एक भ्रामक लिंक\",\"MHk+7g\":\"पिछली छवि\",\"HeBcM5\":\"प्राथमिक भाषा\",\"x8iR7V\":\"अपने फ़ॉलोअर्स को प्राथमिकता दें\",\"rjGI/Q\":\"गोपनीयता\",\"LcET2C\":\"गोपनीयता नीति\",\"k1ifdL\":\"प्रसंस्करण...\",\"vERlcd\":\"प्रोफ़ाइल\",\"MrgqOW\":\"अपने ईमेल को सत्यापित करके अपने खाते को सुरक्षित रखें।।\",\"p1UmBX\":\"सार्वजनिक, साझा करने योग्य सूचियाँ जो फ़ीड चला सकती हैं।\",\"8HFFRQ\":\"कोटे पोस्ट\",\"+KrAHa\":\"कोटे पोस्ट\",\"WlWsdE\":\"अनुपात\",\"WEYdDv\":\"अनुशंसित\",\"QNzcT3\":\"अनुशंसित फ़ीड\",\"41UoJb\":\"अनुशंसित लोग\",\"t/YqKh\":\"निकालें\",\"p/cRzf\":[\"मेरे फ़ीड से \",[\"0\"],\" हटाएं?\"],\"1O32oy\":\"खाता हटाएं\",\"W44VX5\":\"फ़ीड हटाएँ\",\"Yy3FzB\":\"मेरे फ़ीड से हटाएँ\",\"5ywtDz\":\"छवि निकालें\",\"Dw/XUh\":\"छवि पूर्वावलोकन निकालें\",\"TbDEfs\":\"इस फ़ीड को सहेजे गए फ़ीड से हटा दें?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"फिल्टर\",\"lQWbAr\":[\"रिपोर्ट \",[\"collectionName\"]],\"bDHSjj\":\"रिपोर्ट\",\"NKmI9f\":\"रिपोर्ट फ़ीड\",\"6iwm2r\":\"रिपोर्ट सूची\",\"6IcSvC\":\"रिपोर्ट पोस्ट\",\"mkude1\":\"पुन: पोस्ट\",\"JOV5dR\":\"पोस्ट दोबारा पोस्ट करें या उद्धृत करे\",\"0zb9FX\":\"द्वारा दोबारा पोस्ट किया गया\",\"bqG37Z\":\"अनुरोध बदलें\",\"2d9VrZ\":\"पोस्ट करने से पहले वैकल्पिक टेक्स्ट की आवश्यकता है\",\"8XIT+P\":\"इस प्रदाता के लिए आवश्यक\",\"vJgYMA\":\"कोड रीसेट करें\",\"xEL92I\":\"ऑनबोर्डिंग स्टेट को रीसेट करें\",\"RfwZxd\":\"पासवर्ड रीसेट\",\"bee/Fw\":\"प्राथमिकताओं को रीसेट करें\",\"wToeoz\":\"ऑनबोर्डिंग स्टेट को रीसेट करें\",\"nIU7qI\":\"प्राथमिकताओं की स्थिति को रीसेट करें\",\"6gRgw8\":\"फिर से कोशिश करो\",\"hAbYQa\":\"हैंडल बदलना फिर से कोशिश करो\",\"tfDRzk\":\"सेव करो\",\"KV2YQQ\":\"सेव ऑल्ट टेक्स्ट\",\"y3aU20\":\"बदलाव सेव करो\",\"IUwGEM\":\"बदलाव सेव करो\",\"Xs07Tg\":\"बदलाव सेव करो\",\"BckA7m\":\"फोटो बदलाव सेव करो\",\"+K+JDj\":\"सहेजे गए फ़ीड\",\"A1taO8\":\"खोज\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"सुरक्षा चरण आवश्यक\",\"cNzyJW\":\"आगे क्या है\",\"L5sM7N\":\"Bluesky Social का चयन करें\",\"o3dwub\":\"मौजूदा खाते से चुनें\",\"GGw2AK\":\"सेवा चुनें\",\"vECNLO\":\"चुनें कि आप अपनी सदस्यता वाली फ़ीड में कौन सी भाषाएँ शामिल करना चाहते हैं। यदि कोई भी चयनित नहीं है, तो सभी भाषाएँ दिखाई जाएंगी।\",\"m5aabx\":\"ऐप में प्रदर्शित होने वाले डिफ़ॉल्ट टेक्स्ट के लिए अपनी ऐप भाषा चुनें\",\"TiiOza\":\"अपने फ़ीड में अनुवाद के लिए अपनी पसंदीदा भाषा चुनें।\",\"vp9yIB\":\"पुष्टिकरण ईमेल भेजें\",\"65dxv8\":\"ईमेल भेजें\",\"i/TzEU\":\"ईमेल भेजें\",\"RoafuO\":\"प्रतिक्रिया भेजें\",\"4cijjm\":\"रिपोर्ट भेजें\",\"V/e7nf\":\"नया पासवर्ड सेट करें\",\"gwsie4\":\"अपने फ़ीड से सभी उद्धरण पदों को छिपाने के लिए इस सेटिंग को \\\"नहीं\\\" में सेट करें। Reposts अभी भी दिखाई देगा।।\",\"IZjC3J\":\"इस सेटिंग को अपने फ़ीड से सभी उत्तरों को छिपाने के लिए \\\"नहीं\\\" पर सेट करें।।\",\"KIgU3l\":\"इस सेटिंग को अपने फ़ीड से सभी पोस्ट छिपाने के लिए \\\"नहीं\\\" करने के लिए सेट करें।।\",\"zaAyrz\":\"इस सेटिंग को \\\"हाँ\\\" में सेट करने के लिए एक थ्रेडेड व्यू में जवाब दिखाने के लिए। यह एक प्रयोगात्मक विशेषता है।।\",\"fQV2eE\":\"इस सेटिंग को अपने निम्नलिखित फ़ीड में अपने सहेजे गए फ़ीड के नमूने दिखाने के लिए \\\"हाँ\\\" पर सेट करें। यह एक प्रयोगात्मक विशेषता है।।\",\"Tz0i8g\":\"सेटिंग्स\",\"HfWHhJ\":\"यौन गतिविधि या कामुक नग्नता।।\",\"Z8lGw6\":\"शेयर\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"लिंक शेयर करें\",\"8vETh9\":\"दिखाओ\",\"aWAdCb\":\"दिखाओ\",\"NijgXr\":\"मेरी फीड से पोस्ट दिखाएं\",\"T3Mt8m\":\"उद्धरण पोस्ट दिखाओ\",\"BlW8X/\":\"उत्तर दिखाएँ\",\"X4GwDb\":\"अन्य सभी उत्तरों से पहले उन लोगों के उत्तर दिखाएं जिन्हें आप फ़ॉलो करते हैं।\",\"GiogzH\":\"रीपोस्ट दिखाएँ\",\"fhY/fL\":\"लोग दिखाएँ\",\"5lWFkC\":\"साइन इन करें\",\"n1ekoW\":\"साइन इन करें\",\"N9o7n5\":[[\"0\"],\" के रूप में साइन इन करें\"],\"FT1MVS\":\"... के रूप में साइन इन करें\",\"+UpfFC\":\"साइन इन करें\",\"fcWrnU\":\"साइन आउट\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"आपने इस रूप में साइन इन करा है:\",\"6Uau97\":\"स्किप\",\"0o5BFH\":\"उत्तर क्रमबद्ध करें\",\"GH1Rgk\":\"उसी पोस्ट के उत्तरों को इस प्रकार क्रमबद्ध करें:\",\"1DA6ap\":\"स्क्वायर\",\"aKEHLj\":\"स्टेजिंग\",\"tgEXwM\":\"स्थिति पृष्ठ\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"सब्सक्राइब\",\"5z3ICN\":\"इस सूची को सब्सक्राइब करें\",\"TVFyMD\":\"अनुशंसित लोग\",\"XYLcNv\":\"सहायता\",\"VjWeLI\":\"खाते बदलें\",\"D+NlUC\":\"प्रणाली\",\"fP8jTZ\":\"सिस्टम लॉग\",\"HF6Iah\":\"लंबा\",\"4Y5H+g\":\"शर्तें\",\"xowcRf\":\"सेवा की शर्तें\",\"p8Iz39\":\"पाठ इनपुट फ़ील्ड\",\"GlPXQJ\":\"अनब्लॉक करने के बाद अकाउंट आपसे इंटरैक्ट कर सकेगा।\",\"o4M2MP\":\"सामुदायिक दिशानिर्देशों को <0/> पर स्थानांतरित कर दिया गया है\",\"U42lKc\":\"कॉपीराइट नीति को <0/> पर स्थानांतरित कर दिया गया है\",\"G4EksE\":\"हो सकता है कि यह पोस्ट हटा दी गई हो।\",\"WNR9db\":\"गोपनीयता नीति को <0/> पर स्थानांतरित किया गया है\",\"LbEbIk\":[\"समर्थन प्रपत्र स्थानांतरित कर दिया गया है. यदि आपको सहायता की आवश्यकता है, तो कृपया<0/> या हमसे संपर्क करने के लिए \",[\"HELP_DESK_URL\"],\" पर जाएं।\"],\"FGbRSr\":\"सेवा की शर्तों को स्थानांतरित कर दिया गया है\",\"yUqcy2\":\"एप्लिकेशन में एक अप्रत्याशित समस्या थी. कृपया हमें बताएं कि क्या आपके साथ ऐसा हुआ है!\",\"KRYn8w\":[\"यह \",[\"screenDescription\"],\" फ्लैग किया गया है:\"],\"lm845B\":\"यह जानकारी अन्य उपयोगकर्ताओं के साथ साझा नहीं की जाती है।।\",\"5Pvw/O\":\"अगर आपको कभी अपना ईमेल बदलने या पासवर्ड रीसेट करने की आवश्यकता है तो यह महत्वपूर्ण है।।\",\"sQQfZ9\":\"यह वह सेवा है जो आपको ऑनलाइन रखता है।।\",\"CvX8qs\":\"यह लिंक आपको निम्नलिखित वेबसाइट पर ले जा रहा है:\",\"WKrUVy\":\"इस पोस्ट को हटा दिया गया है।।\",\"qpCA5s\":\"यह चेतावनी केवल मीडिया संलग्न पोस्ट के लिए उपलब्ध है।\",\"u9ThjD\":\"थ्रेड प्राथमिकता\",\"zmXsk5\":\"थ्रेड मोड\",\"1x30Qt\":\"ड्रॉपडाउन टॉगल करें\",\"KFXQEt\":\"परिवर्तन\",\"pi8x/S\":\"अनुवाद\",\"KDw4GX\":\"फिर से कोशिश करो\",\"nc4Wfd\":\"आपकी सेवा से संपर्क करने में असमर्थ। कृपया अपने इंटरनेट कनेक्शन की जांच करें।।\",\"tuS5Jz\":\"अनब्लॉक\",\"0VrZZv\":\"अनब्लॉक खाता\",\"6pYY4t\":\"पुनः पोस्ट पूर्ववत करें\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"अनम्यूट खाता\",\"s12/Py\":\"थ्रेड को अनम्यूट करें\",\"vaz2uI\":[\"सूची में \",[\"displayName\"],\" अद्यतन करें\"],\"YXMY4w\":\"उपलब्ध अद्यतन\",\"RXbEvi\":\"अद्यतन..।\",\"Vwkfp4\":\"एक पाठ फ़ाइल अपलोड करने के लिए:\",\"jTdnU6\":\"अपने खाते या पासवर्ड को पूर्ण एक्सेस देने के बिना अन्य ब्लूस्की ग्राहकों को लॉगिन करने के लिए ऐप पासवर्ड का उपयोग करें।।\",\"CH1am9\":\"डिफ़ॉल्ट प्रदाता का उपयोग करें\",\"ZG8UvP\":\"अपने हैंडल के साथ दूसरे ऐप में साइन इन करने के लिए इसका उपयोग करें।\",\"cKXwwI\":\"के द्वारा उपयोग:\",\"t4Yp4Z\":\"यूजर हैंडल\",\"8tsrUV\":\"लोग सूचियाँ\",\"nZx9mr\":\"यूजर नाम या ईमेल पता\",\"Sxm8rQ\":\"यूजर लोग\",\"MBOY4U\":\"ईमेल सत्यापित करें\",\"Ejyv0o\":\"मेरी ईमेल सत्यापित करें\",\"9czCrB\":\"मेरी ईमेल सत्यापित करें\",\"ibSVGR\":\"नया ईमेल सत्यापित करें\",\"nHsQde\":\"डीबग प्रविष्टि देखें\",\"47jzzd\":\"अवतार देखें\",\"wK4H1r\":\"साइट पर जाएं\",\"qjBGxf\":\"हम आपके हमारी सेवा में शामिल होने को लेकर बहुत उत्साहित हैं!\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"हम क्षमा चाहते हैं! हमें वह पेज नहीं मिल रहा जिसे आप ढूंढ रहे थे।\",\"meB+tZ\":\"<0>Bluesky में आपका स्वागत है\",\"Mj7rl/\":[\"इस \",[\"collectionName\"],\" के साथ क्या मुद्दा है?\"],\"3qn29J\":\"इस पोस्ट में किस भाषा का उपयोग किया जाता है?\",\"uawiGa\":\"कौन से भाषाएं आपको अपने एल्गोरिदमिक फ़ीड में देखना पसंद करती हैं?\",\"I5S9ZE\":\"चौड़ा\",\"y02THm\":\"पोस्ट लिखो\",\"6ckZRB\":\"अपना जवाब दें\",\"l75CjT\":\"हाँ\",\"STPj0e\":\"आप किसी भी समय होस्टिंग प्रदाताओं को बदल सकते हैं।।\",\"67nRLM\":\"अब आप अपने नए पासवर्ड के साथ साइन इन कर सकते हैं।।\",\"lIcbCU\":\"आपके पास अभी तक कोई आमंत्रण कोड नहीं है! जब आप कुछ अधिक समय के लिए Bluesky पर रहेंगे तो हम आपको कुछ भेजेंगे।\",\"aFZZYi\":\"आपके पास कोई पिन किया हुआ फ़ीड नहीं है.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"आपके पास कोई सहेजी गई फ़ीड नहीं है.\",\"RkXibf\":\"आपने लेखक को अवरुद्ध किया है या आपने लेखक द्वारा अवरुद्ध किया है।।\",\"tCLJ9E\":\"आपके पास कोई सूची नहीं है।।\",\"soH9qC\":\"आपने अभी तक कोई भी अकाउंट ब्लॉक नहीं किया है. किसी खाते को ब्लॉक करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \\\"खाता ब्लॉक करें\\\" चुनें।\",\"NDgp3i\":\"आपने अभी तक कोई ऐप पासवर्ड नहीं बनाया है। आप नीचे बटन दबाकर एक बना सकते हैं।।\",\"grqdXb\":\"आपने अभी तक कोई खाता म्यूट नहीं किया है. किसी खाते को म्यूट करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \\\"खाता म्यूट करें\\\" चुनें।\",\"RrDyEb\":\"आपको \\\"reset code\\\" के साथ एक ईमेल प्राप्त होगा। उस कोड को यहाँ दर्ज करें, फिर अपना नया पासवर्ड दर्ज करें।।\",\"gdRnT7\":\"आपका खाता\",\"k7hmsH\":\"जन्म तिथि\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"आपका ईमेल बचाया गया है! हम जल्द ही संपर्क में रहेंगे।।\",\"z2L+/9\":\"आपका ईमेल अद्यतन किया गया है लेकिन सत्यापित नहीं किया गया है। अगले चरण के रूप में, कृपया अपना नया ईमेल सत्यापित करें।।\",\"XZlIVw\":\"आपका ईमेल अभी तक सत्यापित नहीं हुआ है। यह एक महत्वपूर्ण सुरक्षा कदम है जिसे हम अनुशंसा करते हैं।।\",\"qv9f4I\":\"आपका पूरा हैंडल होगा\",\"lvcqqG\":\"आपका होस्टिंग प्रदाता\",\"fbFyAZ\":\"Your invite codes are hidden when logged in using an App Password\",\"Oqt/PG\":\"आपकी पोस्ट, पसंद और ब्लॉक सार्वजनिक हैं। म्यूट निजी हैं।।\",\"okRPtW\":\"आपकी प्रोफ़ाइल\",\"MvWO9d\":\"आपका यूजर हैंडल\"}")}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:JSON.parse("{\"PBodTo\":\"- फ़ीड का अंत -\",\"EtUMsZ\":\"यह चेतावनी केवल मीडिया वाले पोस्ट के लिए उपलब्ध है।\",\"J/hVSQ\":[[\"0\"]],\"hZQerY\":[[\"0\"],\" \",[\"purposeLabel\"],\" सूची\"],\"wapGcj\":[[\"message\"]],\"gMjqbV\":\"<0>अपना<1>पसंदीदा<2>फ़ीड चुनें\",\"F657la\":\"<0>कुछ<1>पसंदीदा उपयोगकर्ताओं<2>का अनुसरण करें\",\"6RmyWt\":\"<0>इधर आपका ऐप पासवर्ड है। इसे अपने हैंडल के साथ दूसरे ऐप में साइन करने के लिए उपयोग करें।।\",\"XCTqGE\":\"ऐप का एक नया संस्करण उपलब्ध है. कृपया ऐप का उपयोग जारी रखने के लिए अपडेट करें।\",\"AnNF5e\":\"प्रवेर्शयोग्यता\",\"AeXO77\":\"अकाउंट\",\"4WY4MD\":\"अकाउंट के विकल्प\",\"m16xKo\":\"ऐड करो\",\"fBBX+K\":\"सामग्री चेतावनी जोड़ें\",\"JU3hs2\":\"इस सूची में किसी को जोड़ें\",\"MPPZ54\":\"अकाउंट जोड़ें\",\"LkA8jz\":\"इस फ़ोटो में विवरण जोड़ें\",\"Z8idyM\":\"विवरण जोड़ें\",\"AoXl11\":\"रिपोर्ट करने के लिए विवरण जोड़ें\",\"iE6B/9\":\"लिंक कार्ड जोड़ें\",\"EXHdP1\":\"लिंक कार्ड जोड़ें:\",\"x6laaL\":\"अपने डोमेन में निम्नलिखित DNS रिकॉर्ड जोड़ें:\",\"UmzMP4\":\"सूचियों में जोड़ें\",\"hCrQ0L\":\"इस फ़ीड को सहेजें\",\"GluCXm\":\"Added to list\",\"jRrQFe\":\"पसंद की संख्या को समायोजित करें उत्तर को आपके फ़ीड में दिखाया जाना चाहिए।।\",\"qLa52r\":\"वयस्क सामग्री\",\"sxkWRg\":\"विकसित\",\"u2HO/d\":\"ALT\",\"u/DP73\":\"वैकल्पिक पाठ\",\"0QlT7/\":\"ऑल्ट टेक्स्ट अंधा और कम दृश्य लोगों के लिए छवियों का वर्णन करता है, और हर किसी को संदर्भ देने में मदद करता है।।\",\"woXbjq\":[[\"0\"],\" को ईमेल भेजा गया है। इसमें एक OTP कोड शामिल है जिसे आप नीचे दर्ज कर सकते हैं।।\"],\"Fon2dK\":[[\"0\"],\" को ईमेल भेजा गया है। इसमें एक OTP कोड शामिल है जिसे आप नीचे दर्ज कर सकते हैं।।\"],\"HZFm5R\":\"और\",\"fdjKGe\":\"ऐप भाषा\",\"SMmUnj\":\"ऐप पासवर्ड\",\"8q4WlH\":\"ऐप पासवर्ड\",\"aAIQg2\":\"दिखावट\",\"SSDZ+T\":[\"क्या आप वाकई ऐप पासवर्ड \\\"\",[\"name\"],\"\\\" हटाना चाहते हैं?\"],\"0BIeIs\":\"क्या आप वाकई इस ड्राफ्ट को हटाना करना चाहेंगे?\",\"6foA8n\":\"क्या आप वास्तव में इसे करना चाहते हैं?\",\"/mSd6b\":\"क्या आप वास्तव में इसे करना चाहते हैं? इसे असंपादित नहीं किया जा सकता है।\",\"EbvWd3\":\"कलात्मक या गैर-कामुक नग्नता।।\",\"iH8pgl\":\"वापस\",\"ehOkF+\":\"मूल बातें\",\"+gCI2a\":\"जन्मदिन\",\"pieVBA\":\"जन्मदिन:\",\"m1dqxu\":\"खाता ब्लॉक करें\",\"ffIfdM\":\"खाता ब्लॉक करें\",\"fdYcMy\":\"खाता ब्लॉक करें?\",\"KWykPE\":\"ब्लॉक किए गए खाते\",\"JuqQpF\":\"ब्लॉक किए गए खाते\",\"HG4qt4\":\"अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।\",\"8LNSUt\":\"अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते। आप उनकी सामग्री नहीं देख पाएंगे और उन्हें आपकी सामग्री देखने से रोका जाएगा।\",\"HFCE4A\":\"ब्लॉक पोस्ट।\",\"zl+QbX\":\"अवरोधन सार्वजनिक है. अवरुद्ध खाते आपके थ्रेड्स में उत्तर नहीं दे सकते, आपका उल्लेख नहीं कर सकते, या अन्यथा आपके साथ बातचीत नहीं कर सकते।\",\"7A9u1j\":\"Bluesky\",\"ZHmKSm\":\"Bluesky लचीला है।।\",\"odLrdl\":\"Bluesky खुला है।।\",\"/LsWK4\":\"Bluesky सार्वजनिक है।।\",\"C50OGr\":\"ब्लूस्की एक स्वस्थ समुदाय बनाने के लिए आमंत्रित करता है। यदि आप किसी को आमंत्रित नहीं करते हैं, तो आप प्रतीक्षा सूची के लिए साइन अप कर सकते हैं और हम जल्द ही एक भेज देंगे।।\",\"klVoaP\":\"Bluesky.Social\",\"qxBitM\":[\"Build version \",[\"0\"],\" \",[\"1\"]],\"rT2cV+\":\"कैमरा\",\"JGGrPC\":\"केवल अक्षर, संख्या, रिक्त स्थान, डैश और अंडरस्कोर हो सकते हैं। कम से कम 4 अक्षर लंबा होना चाहिए, लेकिन 32 अक्षरों से अधिक लंबा नहीं होना चाहिए।।\",\"dEgA5A\":\"कैंसिल\",\"aMH9rr\":\"अकाउंट बंद मत करो\",\"kc3E4R\":\"ऑल्ट टेक्स्ट मत जोड़ें\",\"wg4LHQ\":\"नाम मत बदलो\",\"hFL1Li\":\"तस्वीर को क्रॉप मत करो\",\"tijH8t\":\"प्रोफ़ाइल संपादन मत करो\",\"Qe4C/d\":\"कोटे पोस्ट मत करो\",\"5TviPn\":\"खोज मत करो\",\"nss3UV\":\"प्रतीक्षा सूची पंजीकरण मत करो\",\"o+XJ9D\":\"परिवर्तन\",\"pQco5R\":\"हैंडल बदलें\",\"Q5e1U/\":\"हैंडल बदलें\",\"a3NAfL\":\"मेरा ईमेल बदलें\",\"4vatyk\":\"मेरा ईमेल बदलें\",\"Yn3C90\":\"कुछ अनुशंसित फ़ीड देखें. उन्हें अपनी पिन की गई फ़ीड की सूची में जोड़ने के लिए + टैप करें।\",\"ioZXIH\":\"कुछ अनुशंसित उपयोगकर्ताओं की जाँच करें। ऐसे ही उपयोगकर्ता देखने के लिए उनका अनुसरण करें।\",\"/+X+/K\":\"नीचे प्रवेश करने के लिए OTP कोड के साथ एक ईमेल के लिए अपने इनबॉक्स की जाँच करें:\",\"Rt502e\":\"सेवा चुनें\",\"/L45sc\":\"उन एल्गोरिदम का चयन करें जो कस्टम फीड्स के साथ अपने अनुभव को शक्ति देते हैं।।\",\"Wk8hkn\":\"अपना पासवर्ड चुनें\",\"Us7A1O\":\"Clear all legacy storage data\",\"X3zEXo\":\"Clear all legacy storage data (restart after this)\",\"zxFM2c\":\"Clear all storage data\",\"r+lhUL\":\"Clear all storage data (restart after this)\",\"QbvBNV\":\"खोज क्वेरी साफ़ करें\",\"flH7u/\":\"चेतावनी को बंद करो\",\"hYmnbk\":\"बंद करो\",\"47L1V1\":\"छवि बंद करें\",\"l49ujN\":\"छवि बंद करें\",\"UryHFO\":\"नेविगेशन पाद बंद करें\",\"KHzDTk\":\"समुदाय दिशानिर्देश\",\"o8UUti\":\"जवाब लिखो\",\"7VpPHA\":\"हो गया\",\"q8upsf\":\"बदलाव की पुष्टि करें\",\"8pNKIr\":\"सामग्री भाषा सेटिंग्स की पुष्टि करें\",\"tGg8Kt\":\"खाते को हटा दें\",\"ioZOzk\":\"OTP कोड\",\"J28zul\":\"कनेक्टिंग ..।\",\"l879p1\":\"सामग्री फ़िल्टरिंग\",\"m8j6up\":\"सामग्री फ़िल्टरिंग\",\"/PlAsF\":\"सामग्री भाषा\",\"cogwXi\":\"सामग्री चेतावनी\",\"FG7AQv\":\"सामग्री चेतावनी\",\"xGVfLh\":\"आगे बढ़ें\",\"6V3Ea3\":\"कॉपी कर ली\",\"he3ygx\":\"कॉपी\",\"iQgJaz\":\"पोस्ट टेक्स्ट कॉपी करें\",\"u40k/o\":\"कॉपीराइट नीति\",\"7wWvgo\":\"फ़ीड लोड नहीं कर सकता\",\"8NNr/O\":\"सूची लोड नहीं कर सकता\",\"mpt9T+\":\"नया खाता बनाएं\",\"IS0nrP\":\"खाता बनाएँ\",\"6HbhpU\":\"नया खाता बनाएं\",\"MXSt4t\":[\"बनाया गया \",[\"0\"]],\"GAD3Dx\":\"कस्टम डोमेन\",\"ZQKLI1\":\"खतरा क्षेत्र\",\"pvnfJD\":\"डार्क मोड\",\"ZDGm40\":\"खाता हटाएं\",\"vzX5FB\":\"खाता हटाएं\",\"gUEtxf\":\"अप्प पासवर्ड हटाएं\",\"84uE/A\":\"सूची हटाएँ\",\"ktknoE\":\"मेरा खाता हटाएं\",\"szz0+N\":\"मेरा खाता हटाएं…\",\"04G5Az\":\"पोस्ट को हटाएं\",\"FbPNuJ\":\"इस पोस्ट को डीलीट करें?\",\"u+1OHY\":\"यह पोस्ट मिटाई जा चुकी है\",\"Nu4oKW\":\"विवरण\",\"dacKHE\":\"देव सर्वर\",\"2ygkE8\":\"डेवलपर उपकरण\",\"bzSI52\":\"Discard\",\"BryYJR\":\"ड्राफ्ट हटाएं\",\"pbLwal\":\"नए फ़ीड की खोज करें\",\"pfa8F0\":\"नाम\",\"0gS7M5\":\"प्रदर्शन का नाम\",\"iZ5pMB\":\"डोमेन सत्यापित!\",\"DPfwMq\":\"खत्म\",\"zT97vP\":[\"खत्म \",[\"extraText\"]],\"4uwlSD\":\"प्रत्येक कोड एक बार काम करता है। आपको समय-समय पर अधिक आमंत्रण कोड प्राप्त होंगे।\",\"XQFMOm\":\"छवि संपादित करें\",\"S7M0uU\":\"सूची विवरण संपादित करें\",\"cLmurE\":\"मेरी फ़ीड संपादित करें\",\"bRZ5XW\":\"मेरी प्रोफ़ाइल संपादित करें\",\"9OpVZg\":\"मेरी प्रोफ़ाइल संपादित करें\",\"QJQd1J\":\"मेरी प्रोफ़ाइल संपादित करें\",\"Jn7kox\":\"एडिट सेव्ड फीड\",\"O3oNi5\":\"ईमेल\",\"ATGYL1\":\"ईमेल\",\"pJJ0Vp\":\"ईमेल अपडेट किया गया\",\"9Qs99X\":\"ईमेल:\",\"96mted\":\"इस सेटिंग को केवल उन लोगों के बीच जवाब देखने में सक्षम करें जिन्हें आप फॉलो करते हैं।।\",\"YbIxza\":\"अपने प्रदाता का पता दर्ज करें:\",\"BfIgP6\":\"आप जिस डोमेन का उपयोग करना चाहते हैं उसे दर्ज करें\",\"cHrOqs\":\"वह ईमेल दर्ज करें जिसका उपयोग आपने अपना खाता बनाने के लिए किया था। हम आपको एक \\\"reset code\\\" भेजेंगे ताकि आप एक नया पासवर्ड सेट कर सकें।\",\"xRPn3U\":\"अपना ईमेल पता दर्ज करें\",\"+inPGm\":\"नीचे अपना नया ईमेल पता दर्ज करें।।\",\"T0KLp4\":\"अपने यूज़रनेम और पासवर्ड दर्ज करें\",\"4BITzH\":\"Error:\",\"0PkE20\":\"ऑल्ट टेक्स्ट\",\"/5K/KL\":\"अनुशंसित फ़ीड लोड करने में विफल\",\"4yCy8i\":\"फ़ीड ऑफ़लाइन है\",\"N0CqyO\":\"फ़ीड प्राथमिकता\",\"YirHq7\":\"प्रतिक्रिया\",\"2DoBvq\":\"सभी फ़ीड\",\"I3iUBQ\":\"सामग्री को व्यवस्थित करने के लिए उपयोगकर्ताओं द्वारा फ़ीड बनाए जाते हैं। कुछ फ़ीड चुनें जो आपको दिलचस्प लगें।\",\"2+6lmO\":\"फ़ीड कस्टम एल्गोरिदम हैं जिन्हें उपयोगकर्ता थोड़ी कोडिंग विशेषज्ञता के साथ बनाते हैं। <0/> अधिक जानकारी के लिए.\",\"Qzj1WT\":\"मिलते-जुलते खाते ढूँढना\",\"QKSrQV\":\"अपने मुख्य फ़ीड की स्क्रीन पर दिखाई देने वाली सामग्री को ठीक करें।।\",\"r+KeyR\":\"चर्चा धागे को ठीक-ट्यून करें।।\",\"MKEPCY\":\"फॉलो\",\"Wezu5M\":\"आरंभ करने के लिए कुछ उपयोगकर्ताओं का अनुसरण करें. आपको कौन दिलचस्प लगता है, इसके आधार पर हम आपको और अधिक उपयोगकर्ताओं की अनुशंसा कर सकते हैं।\",\"YY2BTA\":\"केवल वे यूजर को फ़ॉलो किया गया\",\"x5LEuB\":\"यह यूजर आपका फ़ोलो करता है\",\"NIjL2Y\":\"फोल्लोविंग\",\"y6sq5j\":\"फोल्लोविंग\",\"p3UO/y\":\"यह यूजर आपका फ़ोलो करता है\",\"5RhDkD\":\"सुरक्षा कारणों के लिए, हमें आपके ईमेल पते पर एक OTP कोड भेजने की आवश्यकता होगी।।\",\"NJPhAO\":\"सुरक्षा कारणों के लिए, आप इसे फिर से देखने में सक्षम नहीं होंगे। यदि आप इस पासवर्ड को खो देते हैं, तो आपको एक नया उत्पन्न करना होगा।।\",\"5bDfuq\":\"भूल\",\"hEPLrs\":\"पासवर्ड भूल गए\",\"dn8X5t\":\"पासवर्ड भूल गए\",\"U+kFad\":\"गैलरी\",\"c3b0B0\":\"प्रारंभ करें\",\"CKyk7Q\":\"वापस जाओ\",\"sr0UJD\":\"वापस जाओ\",\"Rtp0y7\":\"अगला\",\"Nf7oXL\":\"हैंडल\",\"c3XJ18\":\"सहायता\",\"uX/4+/\":\"यहां आपका ऐप पासवर्ड है.\",\"vLyv1R\":\"इसे छिपाएं\",\"qdOx2q\":\"उपयोगकर्ता सूची छुपाएँ\",\"up7j9X\":\"Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.\",\"WTcLyw\":\"Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.\",\"/8MHCt\":\"Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.\",\"3zJH1g\":\"Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.\",\"yNNyhI\":\"Hmmm, we're having trouble finding this feed. It may have been deleted.\",\"i0qMbr\":\"होम फीड\",\"sXZ8IU\":\"होम फ़ीड प्राथमिकताएं\",\"yt7fhu\":\"होस्टिंग प्रदाता\",\"s2xA6t\":\"होस्टिंग प्रदाता पता\",\"o+axy6\":\"मेरे पास एक OTP कोड है\",\"wey2os\":\"मेरे पास अपना डोमेन है\",\"WlEcKr\":\"यदि किसी को चुना जाता है, तो सभी उम्र के लिए उपयुक्त है।।\",\"VCk0rR\":\"छवि alt पाठ\",\"STGpNQ\":\"छवि विकल्प\",\"6o7+En\":\"आपके नेटवर्क में\",\"dSKHAa\":\"अवैध उपयोगकर्ता नाम या पासवर्ड\",\"MFKlMB\":\"आमंत्रण भेजो\",\"F5MZVk\":\"एक दोस्त को आमंत्रित करें\",\"6KlkHI\":\"आमंत्रण कोड\",\"MYTV5o\":\"Invite code not accepted. Check that you input it correctly and try again.\",\"F75w8j\":\"प्रतीक्षा सूची में शामिल हों\",\"6iVTdm\":\"प्रतीक्षा सूची में शामिल हों।।\",\"SNzppu\":\"वेटरलिस्ट में शामिल हों\",\"Dcq5kL\":\"अपनी भाषा चुने\",\"pVhZHk\":\"भाषा सेटिंग्स\",\"GAmD3h\":\"भाषा\",\"NgeSlx\":\"अधिक जानें\",\"rj0Lke\":\"इस चेतावनी के बारे में अधिक जानें\",\"kq2ga7\":\"उन्हें किसी भी भाषा को देखने के लिए अनचेक छोड़ दें।।\",\"QfDITI\":\"लीविंग Bluesky\",\"Esfg1M\":\"चलो अपना पासवर्ड रीसेट करें!\",\"exYcTF\":\"चित्र पुस्तकालय\",\"1njn7W\":\"लाइट मोड\",\"BvSY1i\":\"इस फ़ीड को लाइक करो\",\"8/ALSr\":\"इन यूजर ने लाइक किया है\",\"FuZWua\":\"सूची अवतार\",\"8mjA4F\":\"सूची का नाम\",\"h16FyT\":\"सूची\",\"ujW4FW\":\"अधिक पोस्ट लोड करें\",\"7EHsGr\":\"नई सूचनाएं लोड करें\",\"VkLESX\":\"नई पोस्ट लोड करें\",\"Z3FXyt\":\"Loading...\",\"jl0AFf\":\"स्थानीय देव सर्वर\",\"cR9UpQ\":\"उस खाते में लॉग इन करें जो सूचीबद्ध नहीं है\",\"kkGiug\":\"Looks like this feed is only available to users with a Bluesky account. Please sign up or sign in to view this feed!\",\"2U/gDT\":\"यह सुनिश्चित करने के लिए कि आप कहाँ जाना चाहते हैं!\",\"zucql+\":\"मेनू\",\"DzmsLV\":\"मॉडरेशन\",\"NTIbv4\":\"मॉडरेशन सूचियाँ\",\"FIJUJb\":\"अधिक फ़ीड\",\"3Siwmw\":\"अधिक विकल्प\",\"Y17r45\":\"पोस्ट विकल्प\",\"RA1KUZ\":\"खाता म्यूट करें\",\"du0opt\":\"खातों को म्यूट करें\",\"izOxJM\":\"इन खातों को म्यूट करें?\",\"jq7SjD\":\"थ्रेड म्यूट करें\",\"s22grX\":\"म्यूट किए गए खाते\",\"qUa+lV\":\"म्यूट किए गए खाते\",\"gA0D9A\":\"म्यूट किए गए खातों की पोस्ट आपके फ़ीड और आपकी सूचनाओं से हटा दी जाती हैं। म्यूट पूरी तरह से निजी हैं.\",\"1QJzM7\":\"म्यूट करना निजी है. म्यूट किए गए खाते आपके साथ इंटरैक्ट कर सकते हैं, लेकिन आप उनकी पोस्ट नहीं देखेंगे या उनसे सूचनाएं प्राप्त नहीं करेंगे।\",\"Mysqyf\":\"जन्मदिन\",\"6MBNS/\":\"मेरी फ़ीड\",\"hKtWk2\":\"मेरी प्रोफाइल\",\"Ha6iBv\":\"मेरी फ़ीड\",\"6YtxFj\":\"नाम\",\"8yolS6\":\"अपने फ़ॉलोअर्स और डेटा तक पहुंच कभी न खोएं।\",\"isRobC\":\"नया\",\"2B7HLH\":\"नई पोस्ट\",\"FGrimz\":\"नई पोस्ट\",\"hXzOVo\":\"अगला\",\"EatZYJ\":\"अगली फोटो\",\"1UzENP\":\"नहीं\",\"flmDTf\":\"कोई विवरण नहीं\",\"zfN9gJ\":\"No result\",\"fOlAiK\":[\"\\\"\",[\"query\"],\"\\\" के लिए कोई परिणाम नहीं मिला\"],\"kA9DpB\":[[\"0\"],\" के लिए कोई परिणाम नहीं मिला\"],\"SVF205\":[\"No results found for \",[\"query\"]],\"ispbnl\":\"लागू नहीं\",\"iyUCYw\":\"लागू नहीं।\",\"iDNBZe\":\"सूचनाएं\",\"5GGAqz\":\"अरे नहीं!\",\"UaXeX3\":\"ठीक है\",\"Cqo2D+\":\"एक या अधिक छवियाँ alt पाठ याद आती हैं।।\",\"M/Q2aG\":\"ओपन नेविगेशन\",\"M5PuNq\":\"भाषा सेटिंग्स खोलें\",\"eSqpax\":\"कस्टम डोमेन का उपयोग करने के लिए मोडल खोलें\",\"vYwHHI\":\"मॉडरेशन सेटिंग्स खोलें\",\"0tHyB7\":\"सभी बचाया फ़ीड के साथ स्क्रीन खोलें\",\"nmRoY/\":\"ऐप पासवर्ड सेटिंग पेज खोलें\",\"6e9Apv\":\"होम फीड वरीयताओं को खोलता है\",\"O87Dr/\":\"स्टोरीबुक पेज खोलें\",\"G+PVmg\":\"सिस्टम लॉग पेज खोलें\",\"Jqb7sy\":\"धागे वरीयताओं को खोलता है\",\"b22AVl\":\"अन्य खाता\",\"n+HLOP\":\"अन्य सेवा\",\"1PKxQ7\":\"अन्य..।\",\"8F1i42\":\"पृष्ठ नहीं मिला\",\"8ZsakT\":\"पासवर्ड\",\"ogtYkT\":\"Password updated\",\"DKeVgZ\":\"पासवर्ड अद्यतन!\",\"VeZE5Q\":\"चित्र वयस्कों के लिए थे।।\",\"zgoxy5\":\"पिन किया गया फ़ीड\",\"Aw5fOC\":\"Please choose your handle.\",\"5vI4sE\":\"Please choose your password.\",\"Apyknf\":\"इसे बदलने से पहले कृपया अपने ईमेल की पुष्टि करें। यह एक अस्थायी आवश्यकता है जबकि ईमेल-अपडेटिंग टूल जोड़ा जाता है, और इसे जल्द ही हटा दिया जाएगा।।\",\"9qpQ5O\":\"कृपया इस ऐप पासवर्ड के लिए एक अद्वितीय नाम दर्ज करें या हमारे यादृच्छिक रूप से उत्पन्न एक का उपयोग करें।।\",\"hV+cYN\":\"Please enter your email.\",\"QJr5Xp\":\"कृपया अपना पासवर्ड भी दर्ज करें:\",\"y28hnO\":\"पोस्ट\",\"h5RcXU\":\"छुपा पोस्ट\",\"r5zLS0\":\"पोस्ट भाषा\",\"AzCucI\":\"पोस्ट भाषा\",\"tJFPmV\":\"पोस्ट नहीं मिला\",\"0+DQbr\":\"शायद एक भ्रामक लिंक\",\"MHk+7g\":\"पिछली छवि\",\"HeBcM5\":\"प्राथमिक भाषा\",\"x8iR7V\":\"अपने फ़ॉलोअर्स को प्राथमिकता दें\",\"rjGI/Q\":\"गोपनीयता\",\"LcET2C\":\"गोपनीयता नीति\",\"k1ifdL\":\"प्रसंस्करण...\",\"vERlcd\":\"प्रोफ़ाइल\",\"MrgqOW\":\"अपने ईमेल को सत्यापित करके अपने खाते को सुरक्षित रखें।।\",\"p1UmBX\":\"सार्वजनिक, साझा करने योग्य सूचियाँ जो फ़ीड चला सकती हैं।\",\"8HFFRQ\":\"कोटे पोस्ट\",\"+KrAHa\":\"कोटे पोस्ट\",\"WlWsdE\":\"अनुपात\",\"WEYdDv\":\"अनुशंसित\",\"QNzcT3\":\"अनुशंसित फ़ीड\",\"41UoJb\":\"अनुशंसित लोग\",\"t/YqKh\":\"निकालें\",\"p/cRzf\":[\"मेरे फ़ीड से \",[\"0\"],\" हटाएं?\"],\"1O32oy\":\"खाता हटाएं\",\"W44VX5\":\"फ़ीड हटाएँ\",\"Yy3FzB\":\"मेरे फ़ीड से हटाएँ\",\"5ywtDz\":\"छवि निकालें\",\"Dw/XUh\":\"छवि पूर्वावलोकन निकालें\",\"TbDEfs\":\"इस फ़ीड को सहेजे गए फ़ीड से हटा दें?\",\"Obm5+c\":\"Removed from list\",\"Veu9gK\":\"फिल्टर\",\"lQWbAr\":[\"रिपोर्ट \",[\"collectionName\"]],\"bDHSjj\":\"रिपोर्ट\",\"NKmI9f\":\"रिपोर्ट फ़ीड\",\"6iwm2r\":\"रिपोर्ट सूची\",\"6IcSvC\":\"रिपोर्ट पोस्ट\",\"mkude1\":\"पुन: पोस्ट\",\"JOV5dR\":\"पोस्ट दोबारा पोस्ट करें या उद्धृत करे\",\"0zb9FX\":\"द्वारा दोबारा पोस्ट किया गया\",\"bqG37Z\":\"अनुरोध बदलें\",\"2d9VrZ\":\"पोस्ट करने से पहले वैकल्पिक टेक्स्ट की आवश्यकता है\",\"8XIT+P\":\"इस प्रदाता के लिए आवश्यक\",\"vJgYMA\":\"कोड रीसेट करें\",\"xEL92I\":\"ऑनबोर्डिंग स्टेट को रीसेट करें\",\"RfwZxd\":\"पासवर्ड रीसेट\",\"bee/Fw\":\"प्राथमिकताओं को रीसेट करें\",\"wToeoz\":\"ऑनबोर्डिंग स्टेट को रीसेट करें\",\"nIU7qI\":\"प्राथमिकताओं की स्थिति को रीसेट करें\",\"6gRgw8\":\"फिर से कोशिश करो\",\"hAbYQa\":\"हैंडल बदलना फिर से कोशिश करो\",\"tfDRzk\":\"सेव करो\",\"KV2YQQ\":\"सेव ऑल्ट टेक्स्ट\",\"y3aU20\":\"बदलाव सेव करो\",\"IUwGEM\":\"बदलाव सेव करो\",\"Xs07Tg\":\"बदलाव सेव करो\",\"BckA7m\":\"फोटो बदलाव सेव करो\",\"+K+JDj\":\"सहेजे गए फ़ीड\",\"A1taO8\":\"खोज\",\"BF8cu3\":\"Search for posts and users.\",\"CKROFy\":\"सुरक्षा चरण आवश्यक\",\"cNzyJW\":\"आगे क्या है\",\"L5sM7N\":\"Bluesky Social का चयन करें\",\"o3dwub\":\"मौजूदा खाते से चुनें\",\"GGw2AK\":\"सेवा चुनें\",\"vECNLO\":\"चुनें कि आप अपनी सदस्यता वाली फ़ीड में कौन सी भाषाएँ शामिल करना चाहते हैं। यदि कोई भी चयनित नहीं है, तो सभी भाषाएँ दिखाई जाएंगी।\",\"m5aabx\":\"ऐप में प्रदर्शित होने वाले डिफ़ॉल्ट टेक्स्ट के लिए अपनी ऐप भाषा चुनें\",\"TiiOza\":\"अपने फ़ीड में अनुवाद के लिए अपनी पसंदीदा भाषा चुनें।\",\"vp9yIB\":\"पुष्टिकरण ईमेल भेजें\",\"65dxv8\":\"ईमेल भेजें\",\"i/TzEU\":\"ईमेल भेजें\",\"RoafuO\":\"प्रतिक्रिया भेजें\",\"4cijjm\":\"रिपोर्ट भेजें\",\"V/e7nf\":\"नया पासवर्ड सेट करें\",\"gwsie4\":\"अपने फ़ीड से सभी उद्धरण पदों को छिपाने के लिए इस सेटिंग को \\\"नहीं\\\" में सेट करें। Reposts अभी भी दिखाई देगा।।\",\"IZjC3J\":\"इस सेटिंग को अपने फ़ीड से सभी उत्तरों को छिपाने के लिए \\\"नहीं\\\" पर सेट करें।।\",\"KIgU3l\":\"इस सेटिंग को अपने फ़ीड से सभी पोस्ट छिपाने के लिए \\\"नहीं\\\" करने के लिए सेट करें।।\",\"zaAyrz\":\"इस सेटिंग को \\\"हाँ\\\" में सेट करने के लिए एक थ्रेडेड व्यू में जवाब दिखाने के लिए। यह एक प्रयोगात्मक विशेषता है।।\",\"fQV2eE\":\"इस सेटिंग को अपने निम्नलिखित फ़ीड में अपने सहेजे गए फ़ीड के नमूने दिखाने के लिए \\\"हाँ\\\" पर सेट करें। यह एक प्रयोगात्मक विशेषता है।।\",\"Tz0i8g\":\"सेटिंग्स\",\"HfWHhJ\":\"यौन गतिविधि या कामुक नग्नता।।\",\"Z8lGw6\":\"शेयर\",\"P33tEA\":\"Share feed\",\"uIZ2tg\":\"लिंक शेयर करें\",\"8vETh9\":\"दिखाओ\",\"aWAdCb\":\"दिखाओ\",\"NijgXr\":\"मेरी फीड से पोस्ट दिखाएं\",\"T3Mt8m\":\"उद्धरण पोस्ट दिखाओ\",\"BlW8X/\":\"उत्तर दिखाएँ\",\"X4GwDb\":\"अन्य सभी उत्तरों से पहले उन लोगों के उत्तर दिखाएं जिन्हें आप फ़ॉलो करते हैं।\",\"GiogzH\":\"रीपोस्ट दिखाएँ\",\"fhY/fL\":\"लोग दिखाएँ\",\"5lWFkC\":\"साइन इन करें\",\"n1ekoW\":\"साइन इन करें\",\"N9o7n5\":[[\"0\"],\" के रूप में साइन इन करें\"],\"FT1MVS\":\"... के रूप में साइन इन करें\",\"+UpfFC\":\"साइन इन करें\",\"fcWrnU\":\"साइन आउट\",\"e+RpCP\":\"Sign up\",\"MiE4Vp\":\"Sign up or sign in to join the conversation\",\"zU+Ro7\":\"आपने इस रूप में साइन इन करा है:\",\"6Uau97\":\"स्किप\",\"0o5BFH\":\"उत्तर क्रमबद्ध करें\",\"GH1Rgk\":\"उसी पोस्ट के उत्तरों को इस प्रकार क्रमबद्ध करें:\",\"1DA6ap\":\"स्क्वायर\",\"aKEHLj\":\"स्टेजिंग\",\"tgEXwM\":\"स्थिति पृष्ठ\",\"P5jja7\":\"Storybook\",\"EDl9kS\":\"सब्सक्राइब\",\"5z3ICN\":\"इस सूची को सब्सक्राइब करें\",\"TVFyMD\":\"अनुशंसित लोग\",\"XYLcNv\":\"सहायता\",\"VjWeLI\":\"खाते बदलें\",\"D+NlUC\":\"प्रणाली\",\"fP8jTZ\":\"सिस्टम लॉग\",\"HF6Iah\":\"लंबा\",\"4Y5H+g\":\"शर्तें\",\"xowcRf\":\"सेवा की शर्तें\",\"p8Iz39\":\"पाठ इनपुट फ़ील्ड\",\"GlPXQJ\":\"अनब्लॉक करने के बाद अकाउंट आपसे इंटरैक्ट कर सकेगा।\",\"o4M2MP\":\"सामुदायिक दिशानिर्देशों को <0/> पर स्थानांतरित कर दिया गया है\",\"U42lKc\":\"कॉपीराइट नीति को <0/> पर स्थानांतरित कर दिया गया है\",\"G4EksE\":\"हो सकता है कि यह पोस्ट हटा दी गई हो।\",\"WNR9db\":\"गोपनीयता नीति को <0/> पर स्थानांतरित किया गया है\",\"LbEbIk\":[\"समर्थन प्रपत्र स्थानांतरित कर दिया गया है. यदि आपको सहायता की आवश्यकता है, तो कृपया<0/> या हमसे संपर्क करने के लिए \",[\"HELP_DESK_URL\"],\" पर जाएं।\"],\"FGbRSr\":\"सेवा की शर्तों को स्थानांतरित कर दिया गया है\",\"yUqcy2\":\"एप्लिकेशन में एक अप्रत्याशित समस्या थी. कृपया हमें बताएं कि क्या आपके साथ ऐसा हुआ है!\",\"KRYn8w\":[\"यह \",[\"screenDescription\"],\" फ्लैग किया गया है:\"],\"lm845B\":\"यह जानकारी अन्य उपयोगकर्ताओं के साथ साझा नहीं की जाती है।।\",\"5Pvw/O\":\"अगर आपको कभी अपना ईमेल बदलने या पासवर्ड रीसेट करने की आवश्यकता है तो यह महत्वपूर्ण है।।\",\"sQQfZ9\":\"यह वह सेवा है जो आपको ऑनलाइन रखता है।।\",\"CvX8qs\":\"यह लिंक आपको निम्नलिखित वेबसाइट पर ले जा रहा है:\",\"WKrUVy\":\"इस पोस्ट को हटा दिया गया है।।\",\"qpCA5s\":\"यह चेतावनी केवल मीडिया संलग्न पोस्ट के लिए उपलब्ध है।\",\"u9ThjD\":\"थ्रेड प्राथमिकता\",\"zmXsk5\":\"थ्रेड मोड\",\"1x30Qt\":\"ड्रॉपडाउन टॉगल करें\",\"KFXQEt\":\"परिवर्तन\",\"pi8x/S\":\"अनुवाद\",\"KDw4GX\":\"फिर से कोशिश करो\",\"nc4Wfd\":\"आपकी सेवा से संपर्क करने में असमर्थ। कृपया अपने इंटरनेट कनेक्शन की जांच करें।।\",\"tuS5Jz\":\"अनब्लॉक\",\"0VrZZv\":\"अनब्लॉक खाता\",\"6pYY4t\":\"पुनः पोस्ट पूर्ववत करें\",\"05f3UA\":\"Unfortunately, you do not meet the requirements to create an account.\",\"wx9wqY\":\"अनम्यूट खाता\",\"s12/Py\":\"थ्रेड को अनम्यूट करें\",\"vaz2uI\":[\"सूची में \",[\"displayName\"],\" अद्यतन करें\"],\"YXMY4w\":\"उपलब्ध अद्यतन\",\"RXbEvi\":\"अद्यतन..।\",\"Vwkfp4\":\"एक पाठ फ़ाइल अपलोड करने के लिए:\",\"jTdnU6\":\"अपने खाते या पासवर्ड को पूर्ण एक्सेस देने के बिना अन्य ब्लूस्की ग्राहकों को लॉगिन करने के लिए ऐप पासवर्ड का उपयोग करें।।\",\"CH1am9\":\"डिफ़ॉल्ट प्रदाता का उपयोग करें\",\"ZG8UvP\":\"अपने हैंडल के साथ दूसरे ऐप में साइन इन करने के लिए इसका उपयोग करें।\",\"cKXwwI\":\"के द्वारा उपयोग:\",\"t4Yp4Z\":\"यूजर हैंडल\",\"8tsrUV\":\"लोग सूचियाँ\",\"nZx9mr\":\"यूजर नाम या ईमेल पता\",\"Sxm8rQ\":\"यूजर लोग\",\"MBOY4U\":\"ईमेल सत्यापित करें\",\"Ejyv0o\":\"मेरी ईमेल सत्यापित करें\",\"9czCrB\":\"मेरी ईमेल सत्यापित करें\",\"ibSVGR\":\"नया ईमेल सत्यापित करें\",\"nHsQde\":\"डीबग प्रविष्टि देखें\",\"47jzzd\":\"अवतार देखें\",\"wK4H1r\":\"साइट पर जाएं\",\"qjBGxf\":\"हम आपके हमारी सेवा में शामिल होने को लेकर बहुत उत्साहित हैं!\",\"1xpRAp\":\"We're sorry, but this content is not viewable without a Bluesky account.\",\"WBQOQ0\":\"We're sorry, but your search could not be completed. Please try again in a few minutes.\",\"/mVVX2\":\"हम क्षमा चाहते हैं! हमें वह पेज नहीं मिल रहा जिसे आप ढूंढ रहे थे।\",\"meB+tZ\":\"<0>Bluesky में आपका स्वागत है\",\"Mj7rl/\":[\"इस \",[\"collectionName\"],\" के साथ क्या मुद्दा है?\"],\"3qn29J\":\"इस पोस्ट में किस भाषा का उपयोग किया जाता है?\",\"uawiGa\":\"कौन से भाषाएं आपको अपने एल्गोरिदमिक फ़ीड में देखना पसंद करती हैं?\",\"I5S9ZE\":\"चौड़ा\",\"y02THm\":\"पोस्ट लिखो\",\"6ckZRB\":\"अपना जवाब दें\",\"l75CjT\":\"हाँ\",\"STPj0e\":\"आप किसी भी समय होस्टिंग प्रदाताओं को बदल सकते हैं।।\",\"67nRLM\":\"अब आप अपने नए पासवर्ड के साथ साइन इन कर सकते हैं।।\",\"lIcbCU\":\"आपके पास अभी तक कोई आमंत्रण कोड नहीं है! जब आप कुछ अधिक समय के लिए Bluesky पर रहेंगे तो हम आपको कुछ भेजेंगे।\",\"aFZZYi\":\"आपके पास कोई पिन किया हुआ फ़ीड नहीं है.\",\"kX/cKs\":\"You don't have any saved feeds!\",\"nbz3Iq\":\"आपके पास कोई सहेजी गई फ़ीड नहीं है.\",\"RkXibf\":\"आपने लेखक को अवरुद्ध किया है या आपने लेखक द्वारा अवरुद्ध किया है।।\",\"tCLJ9E\":\"आपके पास कोई सूची नहीं है।।\",\"soH9qC\":\"आपने अभी तक कोई भी अकाउंट ब्लॉक नहीं किया है. किसी खाते को ब्लॉक करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \\\"खाता ब्लॉक करें\\\" चुनें।\",\"NDgp3i\":\"आपने अभी तक कोई ऐप पासवर्ड नहीं बनाया है। आप नीचे बटन दबाकर एक बना सकते हैं।।\",\"grqdXb\":\"आपने अभी तक कोई खाता म्यूट नहीं किया है. किसी खाते को म्यूट करने के लिए, उनकी प्रोफ़ाइल पर जाएं और उनके खाते के मेनू से \\\"खाता म्यूट करें\\\" चुनें।\",\"RrDyEb\":\"आपको \\\"reset code\\\" के साथ एक ईमेल प्राप्त होगा। उस कोड को यहाँ दर्ज करें, फिर अपना नया पासवर्ड दर्ज करें।।\",\"gdRnT7\":\"आपका खाता\",\"k7hmsH\":\"जन्म तिथि\",\"tBpzKB\":\"Your email appears to be invalid.\",\"OubkcP\":\"आपका ईमेल बचाया गया है! हम जल्द ही संपर्क में रहेंगे।।\",\"z2L+/9\":\"आपका ईमेल अद्यतन किया गया है लेकिन सत्यापित नहीं किया गया है। अगले चरण के रूप में, कृपया अपना नया ईमेल सत्यापित करें।।\",\"XZlIVw\":\"आपका ईमेल अभी तक सत्यापित नहीं हुआ है। यह एक महत्वपूर्ण सुरक्षा कदम है जिसे हम अनुशंसा करते हैं।।\",\"qv9f4I\":\"आपका पूरा हैंडल होगा\",\"lvcqqG\":\"आपका होस्टिंग प्रदाता\",\"Oqt/PG\":\"आपकी पोस्ट, पसंद और ब्लॉक सार्वजनिक हैं। म्यूट निजी हैं।।\",\"okRPtW\":\"आपकी प्रोफ़ाइल\",\"MvWO9d\":\"आपका यूजर हैंडल\"}")}; \ No newline at end of file diff --git a/src/locale/locales/hi/messages.po b/src/locale/locales/hi/messages.po index 0a23e482..dfb7318e 100644 --- a/src/locale/locales/hi/messages.po +++ b/src/locale/locales/hi/messages.po @@ -21,12 +21,6 @@ msgstr "" #~ msgid ". This warning is only available for posts with media attached." #~ msgstr "यह चेतावनी केवल मीडिया वाले पोस्ट के लिए उपलब्ध है।" -#: src/view/screens/Settings.tsx:410 -#: src/view/shell/desktop/RightNav.tsx:158 -#: src/view/shell/Drawer.tsx:527 -msgid "{0, plural, one {# invite code available} other {# invite codes available}}" -msgstr "" - #: src/view/com/modals/Repost.tsx:44 msgid "{0}" msgstr "{0}" @@ -35,11 +29,6 @@ msgstr "{0}" msgid "{0} {purposeLabel} List" msgstr "{0} {purposeLabel} सूची" -#: src/view/shell/desktop/RightNav.tsx:141 -#: src/view/shell/Drawer.tsx:504 -msgid "{invitesAvailable, plural, one {Invite codes: # available} other {Invite codes: # available}}" -msgstr "" - #: src/view/screens/Search/Search.tsx:86 msgid "{message}" msgstr "" @@ -61,12 +50,12 @@ msgid "A new version of the app is available. Please update to continue using th msgstr "ऐप का एक नया संस्करण उपलब्ध है. कृपया ऐप का उपयोग जारी रखने के लिए अपडेट करें।" #: src/view/com/modals/EditImage.tsx:299 -#: src/view/screens/Settings.tsx:422 +#: src/view/screens/Settings.tsx:410 msgid "Accessibility" msgstr "प्रवेर्शयोग्यता" #: src/view/com/auth/login/LoginForm.tsx:161 -#: src/view/screens/Settings.tsx:289 +#: src/view/screens/Settings.tsx:288 msgid "Account" msgstr "अकाउंट" @@ -88,8 +77,8 @@ msgstr "सामग्री चेतावनी जोड़ें" msgid "Add a user to this list" msgstr "इस सूची में किसी को जोड़ें" -#: src/view/screens/Settings.tsx:358 -#: src/view/screens/Settings.tsx:367 +#: src/view/screens/Settings.tsx:357 +#: src/view/screens/Settings.tsx:366 msgid "Add account" msgstr "अकाउंट जोड़ें" @@ -140,7 +129,7 @@ msgstr "पसंद की संख्या को समायोजित msgid "Adult Content" msgstr "वयस्क सामग्री" -#: src/view/screens/Settings.tsx:574 +#: src/view/screens/Settings.tsx:562 msgid "Advanced" msgstr "विकसित" @@ -172,7 +161,7 @@ msgstr "और" msgid "App Language" msgstr "ऐप भाषा" -#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:582 msgid "App passwords" msgstr "ऐप पासवर्ड" @@ -180,7 +169,7 @@ msgstr "ऐप पासवर्ड" msgid "App Passwords" msgstr "ऐप पासवर्ड" -#: src/view/screens/Settings.tsx:437 +#: src/view/screens/Settings.tsx:425 msgid "Appearance" msgstr "दिखावट" @@ -205,7 +194,7 @@ msgid "Artistic or non-erotic nudity." msgstr "कलात्मक या गैर-कामुक नग्नता।।" #: src/view/com/auth/create/CreateAccount.tsx:145 -#: src/view/com/auth/login/ChooseAccountForm.tsx:122 +#: src/view/com/auth/login/ChooseAccountForm.tsx:151 #: src/view/com/auth/login/ForgotPasswordForm.tsx:166 #: src/view/com/auth/login/LoginForm.tsx:251 #: src/view/com/auth/login/SetNewPasswordForm.tsx:148 @@ -217,7 +206,7 @@ msgstr "कलात्मक या गैर-कामुक नग्नत msgid "Back" msgstr "वापस" -#: src/view/screens/Settings.tsx:466 +#: src/view/screens/Settings.tsx:454 msgid "Basics" msgstr "मूल बातें" @@ -226,7 +215,7 @@ msgstr "मूल बातें" msgid "Birthday" msgstr "जन्मदिन" -#: src/view/screens/Settings.tsx:315 +#: src/view/screens/Settings.tsx:314 msgid "Birthday:" msgstr "जन्मदिन:" @@ -291,7 +280,7 @@ msgstr "ब्लूस्की एक स्वस्थ समुदाय msgid "Bluesky.Social" msgstr "Bluesky.Social" -#: src/view/screens/Settings.tsx:723 +#: src/view/screens/Settings.tsx:711 msgid "Build version {0} {1}" msgstr "Build version {0} {1}" @@ -359,12 +348,12 @@ msgstr "खोज मत करो" msgid "Cancel waitlist signup" msgstr "प्रतीक्षा सूची पंजीकरण मत करो" -#: src/view/screens/Settings.tsx:309 +#: src/view/screens/Settings.tsx:308 msgid "Change" msgstr "परिवर्तन" -#: src/view/screens/Settings.tsx:606 -#: src/view/screens/Settings.tsx:615 +#: src/view/screens/Settings.tsx:594 +#: src/view/screens/Settings.tsx:603 msgid "Change handle" msgstr "हैंडल बदलें" @@ -404,19 +393,19 @@ msgstr "उन एल्गोरिदम का चयन करें जो msgid "Choose your password" msgstr "अपना पासवर्ड चुनें" -#: src/view/screens/Settings.tsx:699 +#: src/view/screens/Settings.tsx:687 msgid "Clear all legacy storage data" msgstr "" -#: src/view/screens/Settings.tsx:701 +#: src/view/screens/Settings.tsx:689 msgid "Clear all legacy storage data (restart after this)" msgstr "" -#: src/view/screens/Settings.tsx:711 +#: src/view/screens/Settings.tsx:699 msgid "Clear all storage data" msgstr "" -#: src/view/screens/Settings.tsx:713 +#: src/view/screens/Settings.tsx:701 msgid "Clear all storage data (restart after this)" msgstr "" @@ -557,7 +546,7 @@ msgstr "बनाया गया {0}" msgid "Custom domain" msgstr "कस्टम डोमेन" -#: src/view/screens/Settings.tsx:620 +#: src/view/screens/Settings.tsx:608 msgid "Danger Zone" msgstr "खतरा क्षेत्र" @@ -565,7 +554,7 @@ msgstr "खतरा क्षेत्र" #~ msgid "Dark" #~ msgstr "डार्क मोड" -#: src/view/screens/Settings.tsx:627 +#: src/view/screens/Settings.tsx:615 msgid "Delete account" msgstr "खाता हटाएं" @@ -587,7 +576,7 @@ msgstr "सूची हटाएँ" msgid "Delete my account" msgstr "मेरा खाता हटाएं" -#: src/view/screens/Settings.tsx:637 +#: src/view/screens/Settings.tsx:625 msgid "Delete my account…" msgstr "मेरा खाता हटाएं…" @@ -614,7 +603,7 @@ msgstr "विवरण" msgid "Dev Server" msgstr "देव सर्वर" -#: src/view/screens/Settings.tsx:642 +#: src/view/screens/Settings.tsx:630 msgid "Developer Tools" msgstr "डेवलपर उपकरण" @@ -673,7 +662,7 @@ msgid "Edit list details" msgstr "सूची विवरण संपादित करें" #: src/view/screens/Feeds.tsx:367 -#: src/view/screens/SavedFeeds.tsx:75 +#: src/view/screens/SavedFeeds.tsx:85 msgid "Edit My Feeds" msgstr "मेरी फ़ीड संपादित करें" @@ -708,7 +697,7 @@ msgstr "ईमेल" msgid "Email Updated" msgstr "ईमेल अपडेट किया गया" -#: src/view/screens/Settings.tsx:293 +#: src/view/screens/Settings.tsx:292 msgid "Email:" msgstr "ईमेल:" @@ -753,7 +742,7 @@ msgstr "ऑल्ट टेक्स्ट" msgid "Failed to load recommended feeds" msgstr "अनुशंसित फ़ीड लोड करने में विफल" -#: src/view/screens/Feeds.tsx:558 +#: src/view/screens/Feeds.tsx:559 msgid "Feed offline" msgstr "फ़ीड ऑफ़लाइन है" @@ -761,12 +750,12 @@ msgstr "फ़ीड ऑफ़लाइन है" msgid "Feed Preferences" msgstr "फ़ीड प्राथमिकता" -#: src/view/shell/desktop/RightNav.tsx:64 +#: src/view/shell/desktop/RightNav.tsx:65 #: src/view/shell/Drawer.tsx:411 msgid "Feedback" msgstr "प्रतिक्रिया" -#: src/view/screens/Feeds.tsx:474 +#: src/view/screens/Feeds.tsx:475 #: src/view/shell/bottom-bar/BottomBar.tsx:169 #: src/view/shell/desktop/LeftNav.tsx:342 #: src/view/shell/Drawer.tsx:328 @@ -778,7 +767,7 @@ msgstr "सभी फ़ीड" msgid "Feeds are created by users to curate content. Choose some feeds that you find interesting." msgstr "सामग्री को व्यवस्थित करने के लिए उपयोगकर्ताओं द्वारा फ़ीड बनाए जाते हैं। कुछ फ़ीड चुनें जो आपको दिलचस्प लगें।" -#: src/view/screens/SavedFeeds.tsx:132 +#: src/view/screens/SavedFeeds.tsx:156 msgid "Feeds are custom algorithms that users build with a little coding expertise. <0/> for more information." msgstr "फ़ीड कस्टम एल्गोरिदम हैं जिन्हें उपयोगकर्ता थोड़ी कोडिंग विशेषज्ञता के साथ बनाते हैं। <0/> अधिक जानकारी के लिए." @@ -876,7 +865,7 @@ msgstr "अगला" msgid "Handle" msgstr "हैंडल" -#: src/view/shell/desktop/RightNav.tsx:93 +#: src/view/shell/desktop/RightNav.tsx:94 #: src/view/shell/Drawer.tsx:421 msgid "Help" msgstr "सहायता" @@ -893,6 +882,26 @@ msgstr "इसे छिपाएं" msgid "Hide user list" msgstr "उपयोगकर्ता सूची छुपाएँ" +#: src/view/com/posts/FeedErrorMessage.tsx:101 +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:89 +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:95 +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:92 +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:86 +msgid "Hmmm, we're having trouble finding this feed. It may have been deleted." +msgstr "" + #: src/view/shell/bottom-bar/BottomBar.tsx:125 #: src/view/shell/desktop/LeftNav.tsx:306 #: src/view/shell/Drawer.tsx:275 @@ -900,9 +909,9 @@ msgstr "उपयोगकर्ता सूची छुपाएँ" msgid "Home" msgstr "होम फीड" -#: src/view/com/pager/FeedsTabBarMobile.tsx:71 +#: src/view/com/pager/FeedsTabBarMobile.tsx:99 #: src/view/screens/PreferencesHomeFeed.tsx:95 -#: src/view/screens/Settings.tsx:486 +#: src/view/screens/Settings.tsx:474 msgid "Home Feed Preferences" msgstr "होम फ़ीड प्राथमिकताएं" @@ -945,12 +954,12 @@ msgstr "छवि विकल्प" msgid "Invalid username or password" msgstr "अवैध उपयोगकर्ता नाम या पासवर्ड" -#: src/view/screens/Settings.tsx:386 +#: src/view/screens/Settings.tsx:385 msgid "Invite" msgstr "आमंत्रण भेजो" #: src/view/com/modals/InviteCodes.tsx:91 -#: src/view/screens/Settings.tsx:374 +#: src/view/screens/Settings.tsx:373 msgid "Invite a Friend" msgstr "एक दोस्त को आमंत्रित करें" @@ -983,7 +992,7 @@ msgstr "अपनी भाषा चुने" msgid "Language Settings" msgstr "भाषा सेटिंग्स" -#: src/view/screens/Settings.tsx:546 +#: src/view/screens/Settings.tsx:534 msgid "Languages" msgstr "भाषा" @@ -1023,7 +1032,7 @@ msgstr "चित्र पुस्तकालय" #~ msgid "Light" #~ msgstr "लाइट मोड" -#: src/view/screens/ProfileFeed.tsx:625 +#: src/view/screens/ProfileFeed.tsx:626 msgid "Like this feed" msgstr "इस फ़ीड को लाइक करो" @@ -1051,7 +1060,7 @@ msgstr "सूची" msgid "Load more posts" msgstr "अधिक पोस्ट लोड करें" -#: src/view/screens/Notifications.tsx:120 +#: src/view/screens/Notifications.tsx:130 msgid "Load new notifications" msgstr "नई सूचनाएं लोड करें" @@ -1067,11 +1076,11 @@ msgstr "" msgid "Local dev server" msgstr "स्थानीय देव सर्वर" -#: src/view/com/auth/login/ChooseAccountForm.tsx:104 +#: src/view/com/auth/login/ChooseAccountForm.tsx:133 msgid "Login to account that is not listed" msgstr "उस खाते में लॉग इन करें जो सूचीबद्ध नहीं है" -#: src/view/screens/ProfileFeed.tsx:477 +#: src/view/screens/ProfileFeed.tsx:478 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 "" @@ -1084,7 +1093,7 @@ msgid "Menu" msgstr "मेनू" #: src/view/screens/Moderation.tsx:51 -#: src/view/screens/Settings.tsx:568 +#: src/view/screens/Settings.tsx:556 #: src/view/shell/desktop/LeftNav.tsx:400 #: src/view/shell/Drawer.tsx:346 #: src/view/shell/Drawer.tsx:347 @@ -1100,7 +1109,7 @@ msgid "More feeds" msgstr "अधिक फ़ीड" #: src/view/com/profile/ProfileHeader.tsx:506 -#: src/view/screens/ProfileFeed.tsx:367 +#: src/view/screens/ProfileFeed.tsx:368 #: src/view/screens/ProfileList.tsx:506 msgid "More options" msgstr "अधिक विकल्प" @@ -1153,7 +1162,7 @@ msgstr "मेरी फ़ीड" msgid "My Profile" msgstr "मेरी प्रोफाइल" -#: src/view/screens/Settings.tsx:525 +#: src/view/screens/Settings.tsx:513 msgid "My Saved Feeds" msgstr "मेरी फ़ीड" @@ -1171,9 +1180,9 @@ msgid "New" msgstr "नया" #: src/view/com/feeds/FeedPage.tsx:187 -#: src/view/screens/Feeds.tsx:509 -#: src/view/screens/Profile.tsx:380 -#: src/view/screens/ProfileFeed.tsx:447 +#: src/view/screens/Feeds.tsx:510 +#: src/view/screens/Profile.tsx:381 +#: src/view/screens/ProfileFeed.tsx:448 #: src/view/screens/ProfileList.tsx:199 #: src/view/screens/ProfileList.tsx:231 #: src/view/shell/desktop/LeftNav.tsx:255 @@ -1204,7 +1213,7 @@ msgstr "अगली फोटो" msgid "No" msgstr "नहीं" -#: src/view/screens/ProfileFeed.tsx:618 +#: src/view/screens/ProfileFeed.tsx:619 #: src/view/screens/ProfileList.tsx:632 msgid "No description" msgstr "कोई विवरण नहीं" @@ -1213,7 +1222,7 @@ msgstr "कोई विवरण नहीं" msgid "No result" msgstr "" -#: src/view/screens/Feeds.tsx:451 +#: src/view/screens/Feeds.tsx:452 msgid "No results found for \"{query}\"" msgstr "\"{query}\" के लिए कोई परिणाम नहीं मिला" @@ -1238,8 +1247,8 @@ msgstr "" msgid "Not Applicable." msgstr "लागू नहीं।" -#: src/view/screens/Notifications.tsx:87 -#: src/view/screens/Notifications.tsx:111 +#: src/view/screens/Notifications.tsx:97 +#: src/view/screens/Notifications.tsx:121 #: src/view/shell/bottom-bar/BottomBar.tsx:196 #: src/view/shell/desktop/LeftNav.tsx:364 #: src/view/shell/Drawer.tsx:299 @@ -1259,52 +1268,47 @@ msgstr "ठीक है" msgid "One or more images is missing alt text." msgstr "एक या अधिक छवियाँ alt पाठ याद आती हैं।।" -#: src/view/com/pager/FeedsTabBarMobile.tsx:51 +#: src/view/com/pager/FeedsTabBarMobile.tsx:79 msgid "Open navigation" msgstr "ओपन नेविगेशन" -#: src/view/screens/Settings.tsx:538 +#: src/view/screens/Settings.tsx:526 msgid "Opens configurable language settings" msgstr "भाषा सेटिंग्स खोलें" -#: src/view/shell/desktop/RightNav.tsx:146 -#: src/view/shell/Drawer.tsx:509 -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:563 +#: src/view/screens/Settings.tsx:551 msgid "Opens moderation settings" msgstr "मॉडरेशन सेटिंग्स खोलें" -#: src/view/screens/Settings.tsx:519 +#: src/view/screens/Settings.tsx:507 msgid "Opens screen with all saved feeds" msgstr "सभी बचाया फ़ीड के साथ स्क्रीन खोलें" -#: src/view/screens/Settings.tsx:586 +#: src/view/screens/Settings.tsx:574 msgid "Opens the app password settings page" msgstr "ऐप पासवर्ड सेटिंग पेज खोलें" -#: src/view/screens/Settings.tsx:478 +#: src/view/screens/Settings.tsx:466 msgid "Opens the home feed preferences" msgstr "होम फीड वरीयताओं को खोलता है" -#: src/view/screens/Settings.tsx:669 +#: src/view/screens/Settings.tsx:657 msgid "Opens the storybook page" msgstr "स्टोरीबुक पेज खोलें" -#: src/view/screens/Settings.tsx:649 +#: src/view/screens/Settings.tsx:637 msgid "Opens the system log page" msgstr "सिस्टम लॉग पेज खोलें" -#: src/view/screens/Settings.tsx:499 +#: src/view/screens/Settings.tsx:487 msgid "Opens the threads preferences" msgstr "धागे वरीयताओं को खोलता है" -#: src/view/com/auth/login/ChooseAccountForm.tsx:109 +#: src/view/com/auth/login/ChooseAccountForm.tsx:138 msgid "Other account" msgstr "अन्य खाता" @@ -1341,7 +1345,7 @@ msgstr "पासवर्ड अद्यतन!" msgid "Pictures meant for adults." msgstr "चित्र वयस्कों के लिए थे।।" -#: src/view/screens/SavedFeeds.tsx:79 +#: src/view/screens/SavedFeeds.tsx:89 msgid "Pinned Feeds" msgstr "पिन किया गया फ़ीड" @@ -1407,7 +1411,7 @@ msgstr "प्राथमिक भाषा" msgid "Prioritize Your Follows" msgstr "अपने फ़ॉलोअर्स को प्राथमिकता दें" -#: src/view/shell/desktop/RightNav.tsx:75 +#: src/view/shell/desktop/RightNav.tsx:76 msgid "Privacy" msgstr "गोपनीयता" @@ -1426,7 +1430,7 @@ msgstr "प्रसंस्करण..." msgid "Profile" msgstr "प्रोफ़ाइल" -#: src/view/screens/Settings.tsx:794 +#: src/view/screens/Settings.tsx:782 msgid "Protect your account by verifying your email." msgstr "अपने ईमेल को सत्यापित करके अपने खाते को सुरक्षित रखें।।" @@ -1468,7 +1472,7 @@ msgstr "अनुशंसित लोग" msgid "Remove" msgstr "निकालें" -#: src/view/com/feeds/FeedSourceCard.tsx:92 +#: src/view/com/feeds/FeedSourceCard.tsx:108 msgid "Remove {0} from my feeds?" msgstr "मेरे फ़ीड से {0} हटाएं?" @@ -1476,11 +1480,11 @@ msgstr "मेरे फ़ीड से {0} हटाएं?" msgid "Remove account" msgstr "खाता हटाएं" -#: src/view/com/posts/FeedErrorMessage.tsx:106 +#: src/view/com/posts/FeedErrorMessage.tsx:118 msgid "Remove feed" msgstr "फ़ीड हटाएँ" -#: src/view/com/feeds/FeedSourceCard.tsx:91 +#: src/view/com/feeds/FeedSourceCard.tsx:107 #: src/view/screens/ProfileFeed.tsx:278 msgid "Remove from my feeds" msgstr "मेरे फ़ीड से हटाएँ" @@ -1493,7 +1497,7 @@ msgstr "छवि निकालें" msgid "Remove image preview" msgstr "छवि पूर्वावलोकन निकालें" -#: src/view/com/posts/FeedErrorMessage.tsx:107 +#: src/view/com/posts/FeedErrorMessage.tsx:119 msgid "Remove this feed from your saved feeds?" msgstr "इस फ़ीड को सहेजे गए फ़ीड से हटा दें?" @@ -1557,7 +1561,7 @@ msgstr "इस प्रदाता के लिए आवश्यक" msgid "Reset code" msgstr "कोड रीसेट करें" -#: src/view/screens/Settings.tsx:691 +#: src/view/screens/Settings.tsx:679 msgid "Reset onboarding state" msgstr "ऑनबोर्डिंग स्टेट को रीसेट करें" @@ -1565,15 +1569,15 @@ msgstr "ऑनबोर्डिंग स्टेट को रीसेट msgid "Reset password" msgstr "पासवर्ड रीसेट" -#: src/view/screens/Settings.tsx:681 +#: src/view/screens/Settings.tsx:669 msgid "Reset preferences state" msgstr "प्राथमिकताओं को रीसेट करें" -#: src/view/screens/Settings.tsx:689 +#: src/view/screens/Settings.tsx:677 msgid "Resets the onboarding state" msgstr "ऑनबोर्डिंग स्टेट को रीसेट करें" -#: src/view/screens/Settings.tsx:679 +#: src/view/screens/Settings.tsx:667 msgid "Resets the preferences state" msgstr "प्राथमिकताओं की स्थिति को रीसेट करें" @@ -1620,7 +1624,7 @@ msgstr "बदलाव सेव करो" msgid "Save image crop" msgstr "फोटो बदलाव सेव करो" -#: src/view/screens/SavedFeeds.tsx:105 +#: src/view/screens/SavedFeeds.tsx:122 msgid "Saved Feeds" msgstr "सहेजे गए फ़ीड" @@ -1718,7 +1722,7 @@ msgstr "इस सेटिंग को \"हाँ\" में सेट क 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:280 +#: src/view/screens/Settings.tsx:279 #: src/view/shell/desktop/LeftNav.tsx:436 #: src/view/shell/Drawer.tsx:380 #: src/view/shell/Drawer.tsx:381 @@ -1743,7 +1747,7 @@ msgstr "" #~ msgid "Share link" #~ msgstr "लिंक शेयर करें" -#: src/view/screens/Settings.tsx:319 +#: src/view/screens/Settings.tsx:318 msgid "Show" msgstr "दिखाओ" @@ -1787,11 +1791,11 @@ msgstr "साइन इन करें" msgid "Sign In" msgstr "साइन इन करें" -#: src/view/com/auth/login/ChooseAccountForm.tsx:37 +#: src/view/com/auth/login/ChooseAccountForm.tsx:44 msgid "Sign in as {0}" msgstr "{0} के रूप में साइन इन करें" -#: src/view/com/auth/login/ChooseAccountForm.tsx:94 +#: src/view/com/auth/login/ChooseAccountForm.tsx:118 #: src/view/com/auth/login/Login.tsx:100 msgid "Sign in as..." msgstr "... के रूप में साइन इन करें" @@ -1815,7 +1819,7 @@ msgstr "" msgid "Sign up or sign in to join the conversation" msgstr "" -#: src/view/screens/Settings.tsx:330 +#: src/view/screens/Settings.tsx:329 msgid "Signed in as" msgstr "आपने इस रूप में साइन इन करा है:" @@ -1840,11 +1844,11 @@ msgstr "स्क्वायर" msgid "Staging" msgstr "स्टेजिंग" -#: src/view/screens/Settings.tsx:735 +#: src/view/screens/Settings.tsx:723 msgid "Status page" msgstr "स्थिति पृष्ठ" -#: src/view/screens/Settings.tsx:671 +#: src/view/screens/Settings.tsx:659 msgid "Storybook" msgstr "Storybook" @@ -1873,7 +1877,7 @@ msgstr "खाते बदलें" #~ msgid "System" #~ msgstr "प्रणाली" -#: src/view/screens/Settings.tsx:651 +#: src/view/screens/Settings.tsx:639 msgid "System log" msgstr "सिस्टम लॉग" @@ -1881,7 +1885,7 @@ msgstr "सिस्टम लॉग" msgid "Tall" msgstr "लंबा" -#: src/view/shell/desktop/RightNav.tsx:84 +#: src/view/shell/desktop/RightNav.tsx:85 msgid "Terms" msgstr "शर्तें" @@ -1954,7 +1958,7 @@ msgid "This warning is only available for posts with media attached." msgstr "यह चेतावनी केवल मीडिया संलग्न पोस्ट के लिए उपलब्ध है।" #: src/view/screens/PreferencesThreads.tsx:53 -#: src/view/screens/Settings.tsx:508 +#: src/view/screens/Settings.tsx:496 msgid "Thread Preferences" msgstr "थ्रेड प्राथमिकता" @@ -2061,15 +2065,15 @@ msgstr "यूजर नाम या ईमेल पता" msgid "Users" msgstr "यूजर लोग" -#: src/view/screens/Settings.tsx:755 +#: src/view/screens/Settings.tsx:743 msgid "Verify email" msgstr "ईमेल सत्यापित करें" -#: src/view/screens/Settings.tsx:780 +#: src/view/screens/Settings.tsx:768 msgid "Verify my email" msgstr "मेरी ईमेल सत्यापित करें" -#: src/view/screens/Settings.tsx:789 +#: src/view/screens/Settings.tsx:777 msgid "Verify My Email" msgstr "मेरी ईमेल सत्यापित करें" @@ -2094,6 +2098,10 @@ msgstr "साइट पर जाएं" msgid "We're so excited to have you join us!" msgstr "हम आपके हमारी सेवा में शामिल होने को लेकर बहुत उत्साहित हैं!" +#: src/view/com/posts/FeedErrorMessage.tsx:98 +msgid "We're sorry, but this content is not viewable without a Bluesky account." +msgstr "" + #: src/view/screens/Search/Search.tsx:236 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." msgstr "" @@ -2149,7 +2157,7 @@ msgstr "अब आप अपने नए पासवर्ड के साथ 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 "आपके पास अभी तक कोई आमंत्रण कोड नहीं है! जब आप कुछ अधिक समय के लिए Bluesky पर रहेंगे तो हम आपको कुछ भेजेंगे।" -#: src/view/screens/SavedFeeds.tsx:92 +#: src/view/screens/SavedFeeds.tsx:102 msgid "You don't have any pinned feeds." msgstr "आपके पास कोई पिन किया हुआ फ़ीड नहीं है." @@ -2157,7 +2165,7 @@ msgstr "आपके पास कोई पिन किया हुआ फ़ msgid "You don't have any saved feeds!" msgstr "" -#: src/view/screens/SavedFeeds.tsx:118 +#: src/view/screens/SavedFeeds.tsx:135 msgid "You don't have any saved feeds." msgstr "आपके पास कोई सहेजी गई फ़ीड नहीं है." @@ -2220,12 +2228,6 @@ msgstr "आपका पूरा हैंडल होगा" msgid "Your hosting provider" msgstr "आपका होस्टिंग प्रदाता" -#: src/view/screens/Settings.tsx:405 -#: src/view/shell/desktop/RightNav.tsx:127 -#: src/view/shell/Drawer.tsx:523 -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 "आपकी पोस्ट, पसंद और ब्लॉक सार्वजनिक हैं। म्यूट निजी हैं।।" diff --git a/src/logger/index.ts b/src/logger/index.ts index 9f79a781..59cb84ff 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -288,16 +288,13 @@ export class Logger { */ export const logger = new Logger() -/** - * Report to console in dev, Sentry in prod, nothing in test. - */ if (env.IS_DEV && !env.IS_TEST) { logger.addTransport(consoleTransport) /** - * Uncomment this to test Sentry in dev + * Comment this out to disable Sentry transport in dev */ - // logger.addTransport(sentryTransport); + logger.addTransport(sentryTransport) } else if (env.IS_PROD) { - // logger.addTransport(sentryTransport) + logger.addTransport(sentryTransport) } diff --git a/src/state/preferences/feed-tuners.tsx b/src/state/preferences/feed-tuners.tsx index 96770055..c4954d20 100644 --- a/src/state/preferences/feed-tuners.tsx +++ b/src/state/preferences/feed-tuners.tsx @@ -2,9 +2,13 @@ import {useMemo} from 'react' import {FeedTuner} from '#/lib/api/feed-manip' import {FeedDescriptor} from '../queries/post-feed' import {useLanguagePrefs} from './languages' +import {usePreferencesQuery} from '../queries/preferences' +import {useSession} from '../session' export function useFeedTuners(feedDesc: FeedDescriptor) { const langPrefs = useLanguagePrefs() + const {data: preferences} = usePreferencesQuery() + const {currentAccount} = useSession() return useMemo(() => { if (feedDesc.startsWith('feedgen')) { @@ -19,30 +23,30 @@ export function useFeedTuners(feedDesc: FeedDescriptor) { if (feedDesc === 'home' || feedDesc === 'following') { const feedTuners = [] - if (false /*TODOthis.homeFeed.hideReposts*/) { + if (preferences?.feedViewPrefs.hideReposts) { feedTuners.push(FeedTuner.removeReposts) } else { feedTuners.push(FeedTuner.dedupReposts) } - if (true /*TODOthis.homeFeed.hideReplies*/) { + if (preferences?.feedViewPrefs.hideReplies) { feedTuners.push(FeedTuner.removeReplies) - } /* TODO else { + } else { feedTuners.push( FeedTuner.thresholdRepliesOnly({ - userDid: this.rootStore.session.data?.did || '', - minLikes: this.homeFeed.hideRepliesByLikeCount, - followedOnly: !!this.homeFeed.hideRepliesByUnfollowed, + userDid: currentAccount?.did || '', + minLikes: preferences?.feedViewPrefs.hideRepliesByLikeCount || 0, + followedOnly: !!preferences?.feedViewPrefs.hideRepliesByUnfollowed, }), ) - }*/ + } - if (false /*TODOthis.homeFeed.hideQuotePosts*/) { + if (preferences?.feedViewPrefs.hideQuotePosts) { feedTuners.push(FeedTuner.removeQuotePosts) } return feedTuners } return [] - }, [feedDesc, langPrefs]) + }, [feedDesc, currentAccount, preferences, langPrefs]) } diff --git a/src/state/queries/feed.ts b/src/state/queries/feed.ts index 58c1261d..a73e64e8 100644 --- a/src/state/queries/feed.ts +++ b/src/state/queries/feed.ts @@ -181,6 +181,9 @@ export function useIsFeedPublicQuery({uri}: {uri: string}) { if (msg.includes('missing jwt')) { return false + } else if (msg.includes('This feed requires being logged-in')) { + // e.g. https://github.com/bluesky-social/atproto/blob/99ab1ae55c463e8d5321a1eaad07a175bdd56fea/packages/bsky/src/feed-gen/best-of-follows.ts#L13 + return false } return true @@ -243,13 +246,19 @@ const FOLLOWING_FEED_STUB: FeedSourceInfo = { likeUri: '', } -export function usePinnedFeedsInfos(): FeedSourceInfo[] { +export function usePinnedFeedsInfos(): { + feeds: FeedSourceInfo[] + hasPinnedCustom: boolean +} { const queryClient = useQueryClient() const [tabs, setTabs] = React.useState([ FOLLOWING_FEED_STUB, ]) const {data: preferences} = usePreferencesQuery() - const pinnedFeedsKey = JSON.stringify(preferences?.feeds?.pinned) + + const hasPinnedCustom = React.useMemo(() => { + return tabs.some(tab => tab !== FOLLOWING_FEED_STUB) + }, [tabs]) React.useEffect(() => { if (!preferences?.feeds?.pinned) return @@ -296,13 +305,7 @@ export function usePinnedFeedsInfos(): FeedSourceInfo[] { } fetchFeedInfo() - }, [ - queryClient, - setTabs, - preferences?.feeds?.pinned, - // ensure we react to re-ordering - pinnedFeedsKey, - ]) + }, [queryClient, setTabs, preferences?.feeds?.pinned]) - return tabs + return {feeds: tabs, hasPinnedCustom} } diff --git a/src/state/queries/list.ts b/src/state/queries/list.ts index ef05009d..550baecb 100644 --- a/src/state/queries/list.ts +++ b/src/state/queries/list.ts @@ -3,7 +3,6 @@ import { AppBskyGraphGetList, AppBskyGraphList, AppBskyGraphDefs, - BskyAgent, } from '@atproto/api' import {Image as RNImage} from 'react-native-image-crop-picker' import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query' @@ -75,13 +74,9 @@ export function useListCreateMutation() { ) // wait for the appview to update - await whenAppViewReady( - getAgent(), - res.uri, - (v: AppBskyGraphGetList.Response) => { - return typeof v?.data?.list.uri === 'string' - }, - ) + await whenAppViewReady(res.uri, (v: AppBskyGraphGetList.Response) => { + return typeof v?.data?.list.uri === 'string' + }) return res }, onSuccess() { @@ -142,16 +137,12 @@ export function useListMetadataMutation() { ).data // wait for the appview to update - await whenAppViewReady( - getAgent(), - res.uri, - (v: AppBskyGraphGetList.Response) => { - const list = v.data.list - return ( - list.name === record.name && list.description === record.description - ) - }, - ) + await whenAppViewReady(res.uri, (v: AppBskyGraphGetList.Response) => { + const list = v.data.list + return ( + list.name === record.name && list.description === record.description + ) + }) return res }, onSuccess(data, variables) { @@ -216,13 +207,9 @@ export function useListDeleteMutation() { } // wait for the appview to update - await whenAppViewReady( - getAgent(), - uri, - (v: AppBskyGraphGetList.Response) => { - return !v?.success - }, - ) + await whenAppViewReady(uri, (v: AppBskyGraphGetList.Response) => { + return !v?.success + }) }, onSuccess() { invalidateMyLists(queryClient) @@ -271,7 +258,6 @@ export function useListBlockMutation() { } async function whenAppViewReady( - agent: BskyAgent, uri: string, fn: (res: AppBskyGraphGetList.Response) => boolean, ) { @@ -280,7 +266,7 @@ async function whenAppViewReady( 1e3, // 1s delay between tries fn, () => - agent.app.bsky.graph.getList({ + getAgent().app.bsky.graph.getList({ list: uri, limit: 1, }), diff --git a/src/state/queries/my-blocked-accounts.ts b/src/state/queries/my-blocked-accounts.ts index 4d5bd7a0..2c099c63 100644 --- a/src/state/queries/my-blocked-accounts.ts +++ b/src/state/queries/my-blocked-accounts.ts @@ -2,7 +2,6 @@ import {AppBskyGraphGetBlocks} from '@atproto/api' import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' import {getAgent} from '#/state/session' -import {STALE} from '#/state/queries' export const RQKEY = () => ['my-blocked-accounts'] type RQPageParam = string | undefined @@ -15,7 +14,6 @@ export function useMyBlockedAccountsQuery() { QueryKey, RQPageParam >({ - staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(), async queryFn({pageParam}: {pageParam: RQPageParam}) { const res = await getAgent().app.bsky.graph.getBlocks({ diff --git a/src/state/queries/my-muted-accounts.ts b/src/state/queries/my-muted-accounts.ts index 1d686637..a175931b 100644 --- a/src/state/queries/my-muted-accounts.ts +++ b/src/state/queries/my-muted-accounts.ts @@ -2,7 +2,6 @@ import {AppBskyGraphGetMutes} from '@atproto/api' import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' import {getAgent} from '#/state/session' -import {STALE} from '#/state/queries' export const RQKEY = () => ['my-muted-accounts'] type RQPageParam = string | undefined @@ -15,7 +14,6 @@ export function useMyMutedAccountsQuery() { QueryKey, RQPageParam >({ - staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(), async queryFn({pageParam}: {pageParam: RQPageParam}) { const res = await getAgent().app.bsky.graph.getMutes({ diff --git a/src/state/queries/notifications/feed.ts b/src/state/queries/notifications/feed.ts index 54bd8754..5c519d04 100644 --- a/src/state/queries/notifications/feed.ts +++ b/src/state/queries/notifications/feed.ts @@ -1,12 +1,22 @@ -import { - AppBskyFeedDefs, - AppBskyFeedPost, - AppBskyFeedRepost, - AppBskyFeedLike, - AppBskyNotificationListNotifications, - BskyAgent, -} from '@atproto/api' -import chunk from 'lodash.chunk' +/** + * NOTE + * The ./unread.ts API: + * + * - Provides a `checkUnread()` function to sync with the server, + * - Periodically calls `checkUnread()`, and + * - Caches the first page of notifications. + * + * IMPORTANT: This query uses ./unread.ts's cache as its first page, + * IMPORTANT: which means the cache-freshness of this query is driven by the unread API. + * + * Follow these rules: + * + * 1. Call `checkUnread()` if you want to fetch latest in the background. + * 2. Call `checkUnread({invalidate: true})` if you want latest to sync into this query's results immediately. + * 3. Don't call this query's `refetch()` if you're trying to sync latest; call `checkUnread()` instead. + */ + +import {AppBskyFeedDefs} from '@atproto/api' import { useInfiniteQuery, InfiniteData, @@ -14,50 +24,27 @@ import { useQueryClient, QueryClient, } from '@tanstack/react-query' -import {getAgent} from '../../session' import {useModerationOpts} from '../preferences' -import {shouldFilterNotif} from './util' +import {useUnreadNotificationsApi} from './unread' +import {fetchPage} from './util' +import {FeedPage} from './types' import {useMutedThreads} from '#/state/muted-threads' -import {precacheProfile as precacheResolvedUri} from '../resolve-uri' -const GROUPABLE_REASONS = ['like', 'repost', 'follow'] +export type {NotificationType, FeedNotification, FeedPage} from './types' + const PAGE_SIZE = 30 -const MS_1HR = 1e3 * 60 * 60 -const MS_2DAY = MS_1HR * 48 type RQPageParam = string | undefined -type NotificationType = - | 'post-like' - | 'feedgen-like' - | 'repost' - | 'mention' - | 'reply' - | 'quote' - | 'follow' - | 'unknown' export function RQKEY() { return ['notification-feed'] } -export interface FeedNotification { - _reactKey: string - type: NotificationType - notification: AppBskyNotificationListNotifications.Notification - additional?: AppBskyNotificationListNotifications.Notification[] - subjectUri?: string - subject?: AppBskyFeedDefs.PostView -} - -export interface FeedPage { - cursor: string | undefined - items: FeedNotification[] -} - export function useNotificationFeedQuery(opts?: {enabled?: boolean}) { const queryClient = useQueryClient() const moderationOpts = useModerationOpts() const threadMutes = useMutedThreads() + const unreads = useUnreadNotificationsApi() const enabled = opts?.enabled !== false return useInfiniteQuery< @@ -69,40 +56,21 @@ export function useNotificationFeedQuery(opts?: {enabled?: boolean}) { >({ queryKey: RQKEY(), async queryFn({pageParam}: {pageParam: RQPageParam}) { - const res = await getAgent().listNotifications({ - limit: PAGE_SIZE, - cursor: pageParam, - }) - - // filter out notifs by mod rules - const notifs = res.data.notifications.filter( - notif => !shouldFilterNotif(notif, moderationOpts), - ) - - // group notifications which are essentially similar (follows, likes on a post) - let notifsGrouped = groupNotifications(notifs) - - // we fetch subjects of notifications (usually posts) now instead of lazily - // in the UI to avoid relayouts - const subjects = await fetchSubjects(getAgent(), 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 - } + // for the first page, we check the cached page held by the unread-checker first + if (!pageParam) { + const cachedPage = unreads.getCachedUnreadPage() + if (cachedPage) { + return cachedPage } } - - // apply thread muting - notifsGrouped = notifsGrouped.filter( - notif => !isThreadMuted(notif, threadMutes), - ) - - return { - cursor: res.data.cursor, - items: notifsGrouped, - } + // do a normal fetch + return fetchPage({ + limit: PAGE_SIZE, + cursor: pageParam, + queryClient, + moderationOpts, + threadMutes, + }) }, initialPageParam: undefined, getNextPageParam: lastPage => lastPage.cursor, @@ -135,114 +103,3 @@ export function findPostInQueryData( } return undefined } - -function groupNotifications( - notifs: AppBskyNotificationListNotifications.Notification[], -): FeedNotification[] { - const groupedNotifs: FeedNotification[] = [] - for (const notif of notifs) { - const ts = +new Date(notif.indexedAt) - let grouped = false - if (GROUPABLE_REASONS.includes(notif.reason)) { - for (const groupedNotif of groupedNotifs) { - const ts2 = +new Date(groupedNotif.notification.indexedAt) - if ( - Math.abs(ts2 - ts) < MS_2DAY && - notif.reason === groupedNotif.notification.reason && - notif.reasonSubject === groupedNotif.notification.reasonSubject && - notif.author.did !== groupedNotif.notification.author.did - ) { - groupedNotif.additional = groupedNotif.additional || [] - groupedNotif.additional.push(notif) - grouped = true - break - } - } - } - if (!grouped) { - const type = toKnownType(notif) - groupedNotifs.push({ - _reactKey: `notif-${notif.uri}`, - type, - notification: notif, - subjectUri: getSubjectUri(type, notif), - }) - } - } - return groupedNotifs -} - -async function fetchSubjects( - agent: BskyAgent, - groupedNotifs: FeedNotification[], -): Promise> { - const uris = new Set() - for (const notif of groupedNotifs) { - if (notif.subjectUri) { - uris.add(notif.subjectUri) - } - } - const uriChunks = chunk(Array.from(uris), 25) - const postsChunks = await Promise.all( - uriChunks.map(uris => - agent.app.bsky.feed.getPosts({uris}).then(res => res.data.posts), - ), - ) - const map = new Map() - for (const post of postsChunks.flat()) { - if ( - AppBskyFeedPost.isRecord(post.record) && - AppBskyFeedPost.validateRecord(post.record).success - ) { - map.set(post.uri, post) - } - } - return map -} - -function toKnownType( - notif: AppBskyNotificationListNotifications.Notification, -): NotificationType { - if (notif.reason === 'like') { - if (notif.reasonSubject?.includes('feed.generator')) { - return 'feedgen-like' - } - return 'post-like' - } - if ( - notif.reason === 'repost' || - notif.reason === 'mention' || - notif.reason === 'reply' || - notif.reason === 'quote' || - notif.reason === 'follow' - ) { - return notif.reason as NotificationType - } - return 'unknown' -} - -function getSubjectUri( - type: NotificationType, - notif: AppBskyNotificationListNotifications.Notification, -): string | undefined { - if (type === 'reply' || type === 'quote' || type === 'mention') { - return notif.uri - } else if (type === 'post-like' || type === 'repost') { - if ( - AppBskyFeedRepost.isRecord(notif.record) || - AppBskyFeedLike.isRecord(notif.record) - ) { - return typeof notif.record.subject?.uri === 'string' - ? notif.record.subject?.uri - : undefined - } - } -} - -function isThreadMuted(notif: FeedNotification, mutes: string[]): boolean { - if (!notif.subject) { - return false - } - const record = notif.subject.record as AppBskyFeedPost.Record // assured in fetchSubjects() - return mutes.includes(record.reply?.root.uri || notif.subject.uri) -} diff --git a/src/state/queries/notifications/types.ts b/src/state/queries/notifications/types.ts new file mode 100644 index 00000000..0e88f107 --- /dev/null +++ b/src/state/queries/notifications/types.ts @@ -0,0 +1,34 @@ +import { + AppBskyNotificationListNotifications, + AppBskyFeedDefs, +} from '@atproto/api' + +export type NotificationType = + | 'post-like' + | 'feedgen-like' + | 'repost' + | 'mention' + | 'reply' + | 'quote' + | 'follow' + | 'unknown' + +export interface FeedNotification { + _reactKey: string + type: NotificationType + notification: AppBskyNotificationListNotifications.Notification + additional?: AppBskyNotificationListNotifications.Notification[] + subjectUri?: string + subject?: AppBskyFeedDefs.PostView +} + +export interface FeedPage { + cursor: string | undefined + items: FeedNotification[] +} + +export interface CachedFeedPage { + sessDid: string // used to invalidate on session changes + syncedAt: Date + data: FeedPage | undefined +} diff --git a/src/state/queries/notifications/unread.tsx b/src/state/queries/notifications/unread.tsx index 36bc6528..e0510e79 100644 --- a/src/state/queries/notifications/unread.tsx +++ b/src/state/queries/notifications/unread.tsx @@ -1,10 +1,19 @@ +/** + * A kind of companion API to ./feed.ts. See that file for more info. + */ + import React from 'react' import * as Notifications from 'expo-notifications' +import {useQueryClient} from '@tanstack/react-query' import BroadcastChannel from '#/lib/broadcast' import {useSession, getAgent} from '#/state/session' import {useModerationOpts} from '../preferences' -import {shouldFilterNotif} from './util' +import {fetchPage} from './util' +import {CachedFeedPage, FeedPage} from './types' import {isNative} from '#/platform/detection' +import {useMutedThreads} from '#/state/muted-threads' +import {RQKEY as RQKEY_NOTIFS} from './feed' +import {logger} from '#/logger' const UPDATE_INTERVAL = 30 * 1e3 // 30sec @@ -14,7 +23,8 @@ type StateContext = string interface ApiContext { markAllRead: () => Promise - checkUnread: () => Promise + checkUnread: (opts?: {invalidate?: boolean}) => Promise + getCachedUnreadPage: () => FeedPage | undefined } const stateContext = React.createContext('') @@ -22,16 +32,23 @@ const stateContext = React.createContext('') const apiContext = React.createContext({ async markAllRead() {}, async checkUnread() {}, + getCachedUnreadPage: () => undefined, }) export function Provider({children}: React.PropsWithChildren<{}>) { - const {hasSession} = useSession() + const {hasSession, currentAccount} = useSession() + const queryClient = useQueryClient() const moderationOpts = useModerationOpts() + const threadMutes = useMutedThreads() const [numUnread, setNumUnread] = React.useState('') - const checkUnreadRef = React.useRef<(() => Promise) | null>(null) - const lastSyncRef = React.useRef(new Date()) + const checkUnreadRef = React.useRef(null) + const cacheRef = React.useRef({ + sessDid: currentAccount?.did || '', + syncedAt: new Date(), + data: undefined, + }) // periodic sync React.useEffect(() => { @@ -46,14 +63,18 @@ export function Provider({children}: React.PropsWithChildren<{}>) { // listen for broadcasts React.useEffect(() => { const listener = ({data}: MessageEvent) => { - lastSyncRef.current = new Date() + cacheRef.current = { + sessDid: currentAccount?.did || '', + syncedAt: new Date(), + data: undefined, + } setNumUnread(data.event) } broadcast.addEventListener('message', listener) return () => { broadcast.removeEventListener('message', listener) } - }, [setNumUnread]) + }, [setNumUnread, currentAccount]) // create API const api = React.useMemo(() => { @@ -61,7 +82,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { async markAllRead() { // update server await getAgent().updateSeenNotifications( - lastSyncRef.current.toISOString(), + cacheRef.current.syncedAt.toISOString(), ) // update & broadcast @@ -69,38 +90,59 @@ export function Provider({children}: React.PropsWithChildren<{}>) { broadcast.postMessage({event: ''}) }, - async checkUnread() { - const agent = getAgent() + async checkUnread({invalidate}: {invalidate?: boolean} = {}) { + try { + if (!getAgent().session) return - if (!agent.session) return + // count + const page = await fetchPage({ + cursor: undefined, + limit: 40, + queryClient, + moderationOpts, + threadMutes, + }) + const unreadCount = countUnread(page) + const unreadCountStr = + unreadCount >= 30 + ? '30+' + : unreadCount === 0 + ? '' + : String(unreadCount) + if (isNative) { + Notifications.setBadgeCountAsync(Math.min(unreadCount, 30)) + } - // count - const res = await agent.listNotifications({limit: 40}) - const filtered = res.data.notifications.filter( - notif => !notif.isRead && !shouldFilterNotif(notif, moderationOpts), - ) - const num = - filtered.length >= 30 - ? '30+' - : filtered.length === 0 - ? '' - : String(filtered.length) - if (isNative) { - Notifications.setBadgeCountAsync(Math.min(filtered.length, 30)) + // track last sync + const now = new Date() + const lastIndexed = + page.items[0] && new Date(page.items[0].notification.indexedAt) + cacheRef.current = { + sessDid: currentAccount?.did || '', + data: page, + syncedAt: !lastIndexed || now > lastIndexed ? now : lastIndexed, + } + + // update & broadcast + setNumUnread(unreadCountStr) + if (invalidate) { + queryClient.resetQueries({queryKey: RQKEY_NOTIFS()}) + } + broadcast.postMessage({event: unreadCountStr}) + } catch (e) { + logger.error('Failed to check unread notifications', {error: e}) } + }, - // track last sync - const now = new Date() - const lastIndexed = filtered[0] && new Date(filtered[0].indexedAt) - lastSyncRef.current = - !lastIndexed || now > lastIndexed ? now : lastIndexed - - // update & broadcast - setNumUnread(num) - broadcast.postMessage({event: num}) + 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 cacheRef.current.data + } }, } - }, [setNumUnread, moderationOpts]) + }, [setNumUnread, queryClient, moderationOpts, threadMutes, currentAccount]) checkUnreadRef.current = api.checkUnread return ( @@ -117,3 +159,20 @@ export function useUnreadNotifications() { export function useUnreadNotificationsApi() { return React.useContext(apiContext) } + +function countUnread(page: FeedPage) { + let num = 0 + for (const item of page.items) { + if (!item.notification.isRead) { + num++ + } + if (item.additional) { + for (const item2 of item.additional) { + if (!item2.isRead) { + num++ + } + } + } + } + return num +} diff --git a/src/state/queries/notifications/util.ts b/src/state/queries/notifications/util.ts index c49d1851..b8f32047 100644 --- a/src/state/queries/notifications/util.ts +++ b/src/state/queries/notifications/util.ts @@ -3,10 +3,78 @@ import { ModerationOpts, moderateProfile, moderatePost, + AppBskyFeedDefs, + AppBskyFeedPost, + AppBskyFeedRepost, + AppBskyFeedLike, } from '@atproto/api' +import chunk from 'lodash.chunk' +import {QueryClient} from '@tanstack/react-query' +import {getAgent} from '../../session' +import {precacheProfile as precacheResolvedUri} from '../resolve-uri' +import {NotificationType, FeedNotification, FeedPage} from './types' + +const GROUPABLE_REASONS = ['like', 'repost', 'follow'] +const MS_1HR = 1e3 * 60 * 60 +const MS_2DAY = MS_1HR * 48 + +// exported api +// = + +export async function fetchPage({ + cursor, + limit, + queryClient, + moderationOpts, + threadMutes, +}: { + cursor: string | undefined + limit: number + queryClient: QueryClient + moderationOpts: ModerationOpts | undefined + threadMutes: string[] +}): Promise { + const res = await getAgent().listNotifications({ + limit, + cursor, + }) + + // filter out notifs by mod rules + const notifs = res.data.notifications.filter( + notif => !shouldFilterNotif(notif, moderationOpts), + ) + + // group notifications which are essentially similar (follows, likes on a post) + let notifsGrouped = groupNotifications(notifs) + + // 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 + } + } + } + + // apply thread muting + notifsGrouped = notifsGrouped.filter( + notif => !isThreadMuted(notif, threadMutes), + ) + + return { + cursor: res.data.cursor, + items: notifsGrouped, + } +} + +// internal methods +// = // TODO this should be in the sdk as moderateNotification -prf -export function shouldFilterNotif( +function shouldFilterNotif( notif: AppBskyNotificationListNotifications.Notification, moderationOpts: ModerationOpts | undefined, ): boolean { @@ -36,3 +104,116 @@ export function shouldFilterNotif( // (this requires fetching the post) return false } + +function groupNotifications( + notifs: AppBskyNotificationListNotifications.Notification[], +): FeedNotification[] { + const groupedNotifs: FeedNotification[] = [] + for (const notif of notifs) { + const ts = +new Date(notif.indexedAt) + let grouped = false + if (GROUPABLE_REASONS.includes(notif.reason)) { + for (const groupedNotif of groupedNotifs) { + const ts2 = +new Date(groupedNotif.notification.indexedAt) + if ( + 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 + ) { + groupedNotif.additional = groupedNotif.additional || [] + groupedNotif.additional.push(notif) + grouped = true + break + } + } + } + if (!grouped) { + const type = toKnownType(notif) + groupedNotifs.push({ + _reactKey: `notif-${notif.uri}`, + type, + notification: notif, + subjectUri: getSubjectUri(type, notif), + }) + } + } + return groupedNotifs +} + +async function fetchSubjects( + groupedNotifs: FeedNotification[], +): Promise> { + const uris = new Set() + for (const notif of groupedNotifs) { + if (notif.subjectUri) { + uris.add(notif.subjectUri) + } + } + const uriChunks = chunk(Array.from(uris), 25) + const postsChunks = await Promise.all( + uriChunks.map(uris => + getAgent() + .app.bsky.feed.getPosts({uris}) + .then(res => res.data.posts), + ), + ) + const map = new Map() + for (const post of postsChunks.flat()) { + if ( + AppBskyFeedPost.isRecord(post.record) && + AppBskyFeedPost.validateRecord(post.record).success + ) { + map.set(post.uri, post) + } + } + return map +} + +function toKnownType( + notif: AppBskyNotificationListNotifications.Notification, +): NotificationType { + if (notif.reason === 'like') { + if (notif.reasonSubject?.includes('feed.generator')) { + return 'feedgen-like' + } + return 'post-like' + } + if ( + notif.reason === 'repost' || + notif.reason === 'mention' || + notif.reason === 'reply' || + notif.reason === 'quote' || + notif.reason === 'follow' + ) { + return notif.reason as NotificationType + } + return 'unknown' +} + +function getSubjectUri( + type: NotificationType, + notif: AppBskyNotificationListNotifications.Notification, +): string | undefined { + if (type === 'reply' || type === 'quote' || type === 'mention') { + return notif.uri + } else if (type === 'post-like' || type === 'repost') { + if ( + AppBskyFeedRepost.isRecord(notif.record) || + AppBskyFeedLike.isRecord(notif.record) + ) { + return typeof notif.record.subject?.uri === 'string' + ? notif.record.subject?.uri + : undefined + } + } +} + +function isThreadMuted(notif: FeedNotification, mutes: string[]): boolean { + if (!notif.subject) { + return false + } + const record = notif.subject.record as AppBskyFeedPost.Record // assured in fetchSubjects() + return mutes.includes(record.reply?.root.uri || notif.subject.uri) +} diff --git a/src/state/queries/post-feed.ts b/src/state/queries/post-feed.ts index 113e6f2f..7cf315ef 100644 --- a/src/state/queries/post-feed.ts +++ b/src/state/queries/post-feed.ts @@ -1,4 +1,3 @@ -import {useCallback, useMemo} from 'react' import {AppBskyFeedDefs, AppBskyFeedPost, moderatePost} from '@atproto/api' import { useInfiniteQuery, @@ -7,9 +6,8 @@ import { QueryClient, useQueryClient, } from '@tanstack/react-query' -import {getAgent} from '../session' import {useFeedTuners} from '../preferences/feed-tuners' -import {FeedTuner, NoopFeedTuner} from 'lib/api/feed-manip' +import {FeedTuner, FeedTunerFn, NoopFeedTuner} from 'lib/api/feed-manip' import {FeedAPI, ReasonFeedSource} from 'lib/api/feed/types' import {FollowingFeedAPI} from 'lib/api/feed/following' import {AuthorFeedAPI} from 'lib/api/feed/author' @@ -17,10 +15,13 @@ import {LikesFeedAPI} from 'lib/api/feed/likes' import {CustomFeedAPI} from 'lib/api/feed/custom' import {ListFeedAPI} from 'lib/api/feed/list' import {MergeFeedAPI} from 'lib/api/feed/merge' -import {useModerationOpts} from '#/state/queries/preferences' import {logger} from '#/logger' import {STALE} from '#/state/queries' import {precacheFeedPosts as precacheResolvedUris} from './resolve-uri' +import {getAgent} from '#/state/session' +import {DEFAULT_LOGGED_OUT_PREFERENCES} from '#/state/queries/preferences/const' +import {getModerationOpts} from '#/state/queries/preferences/moderation' +import {KnownError} from '#/view/com/posts/FeedErrorMessage' type ActorDid = string type AuthorFilter = @@ -42,7 +43,7 @@ export interface FeedParams { mergeFeedSources?: string[] } -type RQPageParam = string | undefined +type RQPageParam = {cursor: string | undefined; api: FeedAPI} | undefined export function RQKEY(feedDesc: FeedDescriptor, params?: FeedParams) { return ['post-feed', feedDesc, params || {}] @@ -63,7 +64,15 @@ export interface FeedPostSlice { items: FeedPostSliceItem[] } +export interface FeedPageUnselected { + api: FeedAPI + cursor: string | undefined + feed: AppBskyFeedDefs.FeedViewPost[] +} + export interface FeedPage { + api: FeedAPI + tuner: FeedTuner | NoopFeedTuner cursor: string | undefined slices: FeedPostSlice[] } @@ -76,117 +85,139 @@ export function usePostFeedQuery( const queryClient = useQueryClient() const feedTuners = useFeedTuners(feedDesc) const enabled = opts?.enabled !== false - const moderationOpts = useModerationOpts() - const agent = getAgent() - const api: FeedAPI = useMemo(() => { - if (feedDesc === 'home') { - return new MergeFeedAPI(agent, params || {}, feedTuners) - } else if (feedDesc === 'following') { - return new FollowingFeedAPI(agent) - } else if (feedDesc.startsWith('author')) { - const [_, actor, filter] = feedDesc.split('|') - return new AuthorFeedAPI(agent, {actor, filter}) - } else if (feedDesc.startsWith('likes')) { - const [_, actor] = feedDesc.split('|') - return new LikesFeedAPI(agent, {actor}) - } else if (feedDesc.startsWith('feedgen')) { - const [_, feed] = feedDesc.split('|') - return new CustomFeedAPI(agent, {feed}) - } else if (feedDesc.startsWith('list')) { - const [_, list] = feedDesc.split('|') - return new ListFeedAPI(agent, {list}) - } else { - // shouldnt happen - return new FollowingFeedAPI(agent) - } - }, [feedDesc, params, feedTuners, agent]) - - const disableTuner = !!params?.disableTuner - const tuner = useMemo( - () => (disableTuner ? new NoopFeedTuner() : new FeedTuner()), - [disableTuner], - ) - - const pollLatest = useCallback(async () => { - if (!enabled) { - return false - } - - logger.debug('usePostFeedQuery: pollLatest') - - const post = await api.peekLatest() - - if (post && moderationOpts) { - const slices = tuner.tune([post], feedTuners, { - dryRun: true, - maintainOrder: true, - }) - if (slices[0]) { - if ( - !moderatePost(slices[0].items[0].post, moderationOpts).content.filter - ) { - return true - } - } - } - - return false - }, [api, tuner, feedTuners, moderationOpts, enabled]) - - const out = useInfiniteQuery< - FeedPage, + return useInfiniteQuery< + FeedPageUnselected, Error, InfiniteData, QueryKey, RQPageParam >({ + enabled, staleTime: STALE.INFINITY, queryKey: RQKEY(feedDesc, params), async queryFn({pageParam}: {pageParam: RQPageParam}) { logger.debug('usePostFeedQuery', {feedDesc, pageParam}) - if (!pageParam) { - tuner.reset() - } - const res = await api.fetch({cursor: pageParam, limit: 30}) + + const {api, cursor} = pageParam + ? pageParam + : { + api: createApi(feedDesc, params || {}, feedTuners), + cursor: undefined, + } + + const res = await api.fetch({cursor, limit: 30}) precacheResolvedUris(queryClient, res.feed) // precache the handle->did resolution - const slices = tuner.tune(res.feed, feedTuners) + + /* + * If this is a public view, we need to check if posts fail moderation. + * If all fail, we throw an error. If only some fail, we continue and let + * moderations happen later, which results in some posts being shown and + * some not. + */ + if (!getAgent().session) { + assertSomePostsPassModeration(res.feed) + } + return { + api, cursor: res.cursor, - slices: slices.map(slice => ({ - _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, - } - } - return undefined - }) - .filter(Boolean) as FeedPostSliceItem[], - })), + feed: res.feed, } }, initialPageParam: undefined, - getNextPageParam: lastPage => lastPage.cursor, - enabled, + getNextPageParam: lastPage => ({ + api: lastPage.api, + cursor: lastPage.cursor, + }), + select(data) { + const tuner = params?.disableTuner + ? new NoopFeedTuner() + : new FeedTuner(feedTuners) + return { + pageParams: data.pageParams, + pages: data.pages.map(page => ({ + api: page.api, + tuner, + cursor: page.cursor, + slices: tuner.tune(page.feed).map(slice => ({ + _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, + } + } + return undefined + }) + .filter(Boolean) as FeedPostSliceItem[], + })), + })), + } + }, }) +} - return {...out, pollLatest} +export async function pollLatest(page: FeedPage | undefined) { + if (!page) { + return false + } + + logger.debug('usePostFeedQuery: pollLatest') + const post = await page.api.peekLatest() + if (post) { + const slices = page.tuner.tune([post], { + dryRun: true, + maintainOrder: true, + }) + if (slices[0]) { + return true + } + } + + return false +} + +function createApi( + feedDesc: FeedDescriptor, + params: FeedParams, + feedTuners: FeedTunerFn[], +) { + if (feedDesc === 'home') { + return new MergeFeedAPI(params, feedTuners) + } else if (feedDesc === 'following') { + return new FollowingFeedAPI() + } else if (feedDesc.startsWith('author')) { + const [_, actor, filter] = feedDesc.split('|') + return new AuthorFeedAPI({actor, filter}) + } else if (feedDesc.startsWith('likes')) { + const [_, actor] = feedDesc.split('|') + return new LikesFeedAPI({actor}) + } else if (feedDesc.startsWith('feedgen')) { + const [_, feed] = feedDesc.split('|') + return new CustomFeedAPI({feed}) + } else if (feedDesc.startsWith('list')) { + const [_, list] = feedDesc.split('|') + return new ListFeedAPI({list}) + } else { + // shouldnt happen + return new FollowingFeedAPI() + } } /** @@ -196,8 +227,10 @@ export function usePostFeedQuery( export function findPostInQueryData( queryClient: QueryClient, uri: string, -): FeedPostSliceItem | undefined { - const queryDatas = queryClient.getQueriesData>({ +): AppBskyFeedDefs.FeedViewPost | undefined { + const queryDatas = queryClient.getQueriesData< + InfiniteData + >({ queryKey: ['post-feed'], }) for (const [_queryKey, queryData] of queryDatas) { @@ -205,14 +238,34 @@ export function findPostInQueryData( continue } for (const page of queryData?.pages) { - for (const slice of page.slices) { - for (const item of slice.items) { - if (item.uri === uri) { - return item - } + for (const item of page.feed) { + if (item.post.uri === uri) { + return item } } } } return undefined } + +function assertSomePostsPassModeration(feed: AppBskyFeedDefs.FeedViewPost[]) { + // assume false + let somePostsPassModeration = false + + for (const item of feed) { + const moderationOpts = getModerationOpts({ + userDid: '', + preferences: DEFAULT_LOGGED_OUT_PREFERENCES, + }) + const moderation = moderatePost(item.post, moderationOpts) + + if (!moderation.content.filter) { + // we have a sfw post + somePostsPassModeration = true + } + } + + if (!somePostsPassModeration) { + throw new Error(KnownError.FeedNSFPublic) + } +} diff --git a/src/state/queries/post-liked-by.ts b/src/state/queries/post-liked-by.ts index 33b379a0..528b3be7 100644 --- a/src/state/queries/post-liked-by.ts +++ b/src/state/queries/post-liked-by.ts @@ -2,7 +2,6 @@ import {AppBskyFeedGetLikes} from '@atproto/api' import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' import {getAgent} from '#/state/session' -import {STALE} from '#/state/queries' const PAGE_SIZE = 30 type RQPageParam = string | undefined @@ -18,7 +17,6 @@ export function usePostLikedByQuery(resolvedUri: string | undefined) { QueryKey, RQPageParam >({ - staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(resolvedUri || ''), async queryFn({pageParam}: {pageParam: RQPageParam}) { const res = await getAgent().getLikes({ diff --git a/src/state/queries/post-reposted-by.ts b/src/state/queries/post-reposted-by.ts index 3a6fe163..f9a80056 100644 --- a/src/state/queries/post-reposted-by.ts +++ b/src/state/queries/post-reposted-by.ts @@ -2,7 +2,6 @@ import {AppBskyFeedGetRepostedBy} from '@atproto/api' import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' import {getAgent} from '#/state/session' -import {STALE} from '#/state/queries' const PAGE_SIZE = 30 type RQPageParam = string | undefined @@ -18,7 +17,6 @@ export function usePostRepostedByQuery(resolvedUri: string | undefined) { QueryKey, RQPageParam >({ - staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(resolvedUri || ''), async queryFn({pageParam}: {pageParam: RQPageParam}) { const res = await getAgent().getRepostedBy({ diff --git a/src/state/queries/post-thread.ts b/src/state/queries/post-thread.ts index c616b05c..d40af1fe 100644 --- a/src/state/queries/post-thread.ts +++ b/src/state/queries/post-thread.ts @@ -7,11 +7,7 @@ import {useQuery, useQueryClient, QueryClient} from '@tanstack/react-query' import {getAgent} from '#/state/session' import {UsePreferencesQueryResponse} from '#/state/queries/preferences/types' -import {STALE} from '#/state/queries' -import { - findPostInQueryData as findPostInFeedQueryData, - FeedPostSliceItem, -} from './post-feed' +import {findPostInQueryData as findPostInFeedQueryData} from './post-feed' import {findPostInQueryData as findPostInNotifsQueryData} from './notifications/feed' import {precacheThreadPosts as precacheResolvedUris} from './resolve-uri' @@ -68,7 +64,6 @@ export type ThreadNode = export function usePostThreadQuery(uri: string | undefined) { const queryClient = useQueryClient() return useQuery({ - staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(uri || ''), async queryFn() { const res = await getAgent().getPostThread({uri: uri!}) @@ -93,7 +88,7 @@ export function usePostThreadQuery(uri: string | undefined) { { const item = findPostInFeedQueryData(queryClient, uri) if (item) { - return feedItemToPlaceholderThread(item) + return feedViewPostToPlaceholderThread(item) } } { @@ -275,13 +270,15 @@ function threadNodeToPlaceholderThread( } } -function feedItemToPlaceholderThread(item: FeedPostSliceItem): ThreadNode { +function feedViewPostToPlaceholderThread( + item: AppBskyFeedDefs.FeedViewPost, +): ThreadNode { return { type: 'post', _reactKey: item.post.uri, uri: item.post.uri, post: item.post, - record: item.record, + record: item.post.record as AppBskyFeedPost.Record, // validated in post-feed parent: undefined, replies: undefined, viewer: item.post.viewer, @@ -291,7 +288,7 @@ function feedItemToPlaceholderThread(item: FeedPostSliceItem): ThreadNode { hasMore: false, showChildReplyLine: false, showParentReplyLine: false, - isParentLoading: !!item.record.reply, + isParentLoading: !!(item.post.record as AppBskyFeedPost.Record).reply, isChildLoading: !!item.post.replyCount, }, } @@ -305,7 +302,7 @@ function postViewToPlaceholderThread( _reactKey: post.uri, uri: post.uri, post: post, - record: post.record as AppBskyFeedPost.Record, // validate in notifs + record: post.record as AppBskyFeedPost.Record, // validated in notifs parent: undefined, replies: undefined, viewer: post.viewer, diff --git a/src/state/queries/post.ts b/src/state/queries/post.ts index d4193b8c..b3169644 100644 --- a/src/state/queries/post.ts +++ b/src/state/queries/post.ts @@ -4,13 +4,11 @@ import {useQuery, useMutation, useQueryClient} from '@tanstack/react-query' import {getAgent} from '#/state/session' import {updatePostShadow} from '#/state/cache/post-shadow' -import {STALE} from '#/state/queries' export const RQKEY = (postUri: string) => ['post', postUri] export function usePostQuery(uri: string | undefined) { return useQuery({ - staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(uri || ''), async queryFn() { const res = await getAgent().getPosts({uris: [uri!]}) @@ -29,7 +27,6 @@ export function useGetPost() { return React.useCallback( async ({uri}: {uri: string}) => { return queryClient.fetchQuery({ - staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(uri || ''), async queryFn() { const urip = new AtUri(uri) diff --git a/src/state/queries/profile-feedgens.ts b/src/state/queries/profile-feedgens.ts index 04860430..7d33eb9c 100644 --- a/src/state/queries/profile-feedgens.ts +++ b/src/state/queries/profile-feedgens.ts @@ -2,7 +2,6 @@ import {AppBskyFeedGetActorFeeds} from '@atproto/api' import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' import {getAgent} from '#/state/session' -import {STALE} from '#/state/queries' const PAGE_SIZE = 30 type RQPageParam = string | undefined @@ -22,7 +21,6 @@ export function useProfileFeedgensQuery( QueryKey, RQPageParam >({ - staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(did), async queryFn({pageParam}: {pageParam: RQPageParam}) { const res = await getAgent().app.bsky.feed.getActorFeeds({ diff --git a/src/state/queries/profile-followers.ts b/src/state/queries/profile-followers.ts index 774bd23f..b2008851 100644 --- a/src/state/queries/profile-followers.ts +++ b/src/state/queries/profile-followers.ts @@ -2,7 +2,6 @@ import {AppBskyGraphGetFollowers} from '@atproto/api' import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' import {getAgent} from '#/state/session' -import {STALE} from '#/state/queries' const PAGE_SIZE = 30 type RQPageParam = string | undefined @@ -17,7 +16,6 @@ export function useProfileFollowersQuery(did: string | undefined) { QueryKey, RQPageParam >({ - staleTime: STALE.MINUTES.FIVE, queryKey: RQKEY(did || ''), async queryFn({pageParam}: {pageParam: RQPageParam}) { const res = await getAgent().app.bsky.graph.getFollowers({ diff --git a/src/state/queries/profile-lists.ts b/src/state/queries/profile-lists.ts index 997c8591..505d33b9 100644 --- a/src/state/queries/profile-lists.ts +++ b/src/state/queries/profile-lists.ts @@ -1,8 +1,6 @@ import {AppBskyGraphGetLists} from '@atproto/api' import {useInfiniteQuery, InfiniteData, QueryKey} from '@tanstack/react-query' - import {getAgent} from '#/state/session' -import {STALE} from '#/state/queries' const PAGE_SIZE = 30 type RQPageParam = string | undefined @@ -18,7 +16,6 @@ export function useProfileListsQuery(did: string, opts?: {enabled?: boolean}) { QueryKey, RQPageParam >({ - staleTime: STALE.MINUTES.ONE, queryKey: RQKEY(did), async queryFn({pageParam}: {pageParam: RQPageParam}) { const res = await getAgent().app.bsky.graph.getLists({ diff --git a/src/state/queries/profile.ts b/src/state/queries/profile.ts index e27bac9a..62e8f39c 100644 --- a/src/state/queries/profile.ts +++ b/src/state/queries/profile.ts @@ -4,7 +4,6 @@ import { AppBskyActorDefs, AppBskyActorProfile, AppBskyActorGetProfile, - BskyAgent, } from '@atproto/api' import {useQuery, useQueryClient, useMutation} from '@tanstack/react-query' import {Image as RNImage} from 'react-native-image-crop-picker' @@ -22,6 +21,10 @@ export const RQKEY = (did: string) => ['profile', did] export function useProfileQuery({did}: {did: string | undefined}) { return useQuery({ + // WARNING + // this staleTime is load-bearing + // if you remove it, the UI infinite-loops + // -prf staleTime: STALE.MINUTES.FIVE, queryKey: RQKEY(did || ''), queryFn: async () => { @@ -68,7 +71,7 @@ export function useProfileUpdateMutation() { } return existing }) - await whenAppViewReady(getAgent(), profile.did, res => { + await whenAppViewReady(profile.did, res => { if (typeof newUserAvatar !== 'undefined') { if (newUserAvatar === null && res.data.avatar) { // url hasnt cleared yet @@ -464,7 +467,6 @@ function useProfileUnblockMutation() { } async function whenAppViewReady( - agent: BskyAgent, actor: string, fn: (res: AppBskyActorGetProfile.Response) => boolean, ) { @@ -472,6 +474,6 @@ async function whenAppViewReady( 5, // 5 tries 1e3, // 1s delay between tries fn, - () => agent.app.bsky.actor.getProfile({actor}), + () => getAgent().app.bsky.actor.getProfile({actor}), ) } diff --git a/src/state/queries/resolve-uri.ts b/src/state/queries/resolve-uri.ts index 05a9f4b1..a7599846 100644 --- a/src/state/queries/resolve-uri.ts +++ b/src/state/queries/resolve-uri.ts @@ -23,7 +23,7 @@ export function useResolveUriQuery(uri: string | undefined): UriUseQueryResult { export function useResolveDidQuery(didOrHandle: string | undefined) { return useQuery({ - staleTime: STALE.INFINITY, + staleTime: STALE.HOURS.ONE, queryKey: RQKEY(didOrHandle || ''), async queryFn() { if (!didOrHandle) { diff --git a/src/state/queries/service.ts b/src/state/queries/service.ts index c7df8996..5f7e1077 100644 --- a/src/state/queries/service.ts +++ b/src/state/queries/service.ts @@ -1,13 +1,10 @@ import {BskyAgent} from '@atproto/api' import {useQuery} from '@tanstack/react-query' -import {STALE} from '#/state/queries' - export const RQKEY = (serviceUrl: string) => ['service', serviceUrl] export function useServiceQuery(serviceUrl: string) { return useQuery({ - staleTime: STALE.HOURS.ONE, queryKey: RQKEY(serviceUrl), queryFn: async () => { const agent = new BskyAgent({service: serviceUrl}) diff --git a/src/state/queries/suggested-follows.ts b/src/state/queries/suggested-follows.ts index 176bbe15..eadcb590 100644 --- a/src/state/queries/suggested-follows.ts +++ b/src/state/queries/suggested-follows.ts @@ -90,7 +90,7 @@ export function useGetSuggestedFollowersByActor() { return React.useCallback( async (actor: string) => { const res = await queryClient.fetchQuery({ - staleTime: 60 * 1000, + staleTime: STALE.MINUTES.ONE, queryKey: suggestedFollowsByActorQueryKey(actor), queryFn: async () => { const res = diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx index 946c742a..e6def1fa 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -13,6 +13,12 @@ import {useCloseAllActiveElements} from '#/state/util' let __globalAgent: BskyAgent = PUBLIC_BSKY_AGENT +/** + * NOTE + * Never hold on to the object returned by this function. + * Call `getAgent()` at the time of invocation to ensure + * that you never have a stale agent. + */ export function getAgent() { return __globalAgent } diff --git a/src/view/com/auth/login/ChooseAccountForm.tsx b/src/view/com/auth/login/ChooseAccountForm.tsx index 8c94ef2d..73ddfc9d 100644 --- a/src/view/com/auth/login/ChooseAccountForm.tsx +++ b/src/view/com/auth/login/ChooseAccountForm.tsx @@ -1,23 +1,30 @@ import React from 'react' import {ScrollView, TouchableOpacity, View} from 'react-native' -import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' +import { + FontAwesomeIcon, + FontAwesomeIconStyle, +} from '@fortawesome/react-native-fontawesome' import {useAnalytics} from 'lib/analytics/analytics' import {Text} from '../../util/text/Text' import {UserAvatar} from '../../util/UserAvatar' -import {s} from 'lib/styles' +import {s, colors} from 'lib/styles' import {usePalette} from 'lib/hooks/usePalette' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {styles} from './styles' import {useSession, useSessionApi, SessionAccount} from '#/state/session' import {useProfileQuery} from '#/state/queries/profile' +import {useLoggedOutViewControls} from '#/state/shell/logged-out' +import * as Toast from '#/view/com/util/Toast' function AccountItem({ account, onSelect, + isCurrentAccount, }: { account: SessionAccount onSelect: (account: SessionAccount) => void + isCurrentAccount: boolean }) { const pal = usePalette('default') const {_} = useLingui() @@ -48,11 +55,19 @@ function AccountItem({ {account.handle} - + {isCurrentAccount ? ( + + ) : ( + + )} ) @@ -67,8 +82,9 @@ export const ChooseAccountForm = ({ const {track, screen} = useAnalytics() const pal = usePalette('default') const {_} = useLingui() - const {accounts} = useSession() + const {accounts, currentAccount} = useSession() const {initSession} = useSessionApi() + const {setShowLoggedOut} = useLoggedOutViewControls() React.useEffect(() => { screen('Choose Account') @@ -77,13 +93,21 @@ export const ChooseAccountForm = ({ const onSelect = React.useCallback( async (account: SessionAccount) => { if (account.accessJwt) { - await initSession(account) - track('Sign In', {resumedSession: true}) + if (account.did === currentAccount?.did) { + setShowLoggedOut(false) + Toast.show(`Already signed in as @${account.handle}`) + } else { + await initSession(account) + track('Sign In', {resumedSession: true}) + setTimeout(() => { + Toast.show(`Signed in as @${account.handle}`) + }, 100) + } } else { onSelectAccount(account) } }, - [track, initSession, onSelectAccount], + [currentAccount, track, initSession, onSelectAccount, setShowLoggedOut], ) return ( @@ -94,7 +118,12 @@ export const ChooseAccountForm = ({ Sign in as... {accounts.map(account => ( - + ))} { if (isPageFocused) { scrollToTop() - queryClient.invalidateQueries({queryKey: FEED_RQKEY(feed)}) + queryClient.resetQueries({queryKey: FEED_RQKEY(feed)}) setHasNew(false) } }, [isPageFocused, scrollToTop, queryClient, feed, setHasNew]) @@ -83,7 +83,7 @@ export function FeedPage({ const onPressLoadLatest = React.useCallback(() => { scrollToTop() - queryClient.invalidateQueries({queryKey: FEED_RQKEY(feed)}) + queryClient.resetQueries({queryKey: FEED_RQKEY(feed)}) setHasNew(false) }, [scrollToTop, feed, queryClient, setHasNew]) diff --git a/src/view/com/feeds/FeedSourceCard.tsx b/src/view/com/feeds/FeedSourceCard.tsx index d8b67767..1f2af069 100644 --- a/src/view/com/feeds/FeedSourceCard.tsx +++ b/src/view/com/feeds/FeedSourceCard.tsx @@ -17,12 +17,14 @@ import {useModalControls} from '#/state/modals' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import { + usePinFeedMutation, UsePreferencesQueryResponse, usePreferencesQuery, useSaveFeedMutation, useRemoveFeedMutation, } from '#/state/queries/preferences' import {useFeedSourceInfoQuery, FeedSourceInfo} from '#/state/queries/feed' +import {FeedLoadingPlaceholder} from '#/view/com/util/LoadingPlaceholder' export function FeedSourceCard({ feedUri, @@ -30,17 +32,27 @@ export function FeedSourceCard({ showSaveBtn = false, showDescription = false, showLikes = false, + LoadingComponent, + pinOnSave = false, }: { feedUri: string style?: StyleProp showSaveBtn?: boolean showDescription?: boolean showLikes?: boolean + LoadingComponent?: JSX.Element + pinOnSave?: boolean }) { const {data: preferences} = usePreferencesQuery() const {data: feed} = useFeedSourceInfoQuery({uri: feedUri}) - if (!feed || !preferences) return null + if (!feed || !preferences) { + return LoadingComponent ? ( + LoadingComponent + ) : ( + + ) + } return ( ) } @@ -61,6 +74,7 @@ export function FeedSourceCardLoaded({ showSaveBtn = false, showDescription = false, showLikes = false, + pinOnSave = false, }: { feed: FeedSourceInfo preferences: UsePreferencesQueryResponse @@ -68,6 +82,7 @@ export function FeedSourceCardLoaded({ showSaveBtn?: boolean showDescription?: boolean showLikes?: boolean + pinOnSave?: boolean }) { const pal = usePalette('default') const {_} = useLingui() @@ -78,6 +93,7 @@ export function FeedSourceCardLoaded({ useSaveFeedMutation() const {isPending: isRemovePending, mutateAsync: removeFeed} = useRemoveFeedMutation() + const {isPending: isPinPending, mutateAsync: pinFeed} = usePinFeedMutation() const isSaved = Boolean(preferences?.feeds?.saved?.includes(feed.uri)) @@ -103,14 +119,18 @@ export function FeedSourceCardLoaded({ }) } else { try { - await saveFeed({uri: feed.uri}) + if (pinOnSave) { + await pinFeed({uri: feed.uri}) + } else { + await saveFeed({uri: feed.uri}) + } Toast.show('Added to my feeds') } catch (e) { Toast.show('There was an issue contacting your server') logger.error('Failed to save feed', {error: e}) } } - }, [isSaved, openModal, feed, removeFeed, saveFeed, _]) + }, [isSaved, openModal, feed, removeFeed, saveFeed, _, pinOnSave, pinFeed]) if (!feed || !preferences) return null @@ -150,7 +170,7 @@ export function FeedSourceCardLoaded({ {showSaveBtn && feed.type === 'feed' && ( { - let cleanup if (firstItem) { - const to = setTimeout(() => markAllRead(), 250) - cleanup = () => clearTimeout(to) + markAllRead() } - return cleanup }, [firstItem, markAllRead]) const items = React.useMemo(() => { @@ -83,7 +79,7 @@ export function Feed({ const onRefresh = React.useCallback(async () => { try { setIsPTRing(true) - await refetch() + await checkUnread({invalidate: true}) } catch (err) { logger.error('Failed to refresh notifications feed', { error: err, @@ -91,7 +87,7 @@ export function Feed({ } finally { setIsPTRing(false) } - }, [refetch, setIsPTRing]) + }, [checkUnread, setIsPTRing]) const onEndReached = React.useCallback(async () => { if (isFetching || !hasNextPage || isError) return @@ -136,21 +132,6 @@ export function Feed({ [onPressRetryLoadMore, moderationOpts], ) - const showHeaderSpinner = !isPTRing && isFetching && !isLoading - const FeedHeader = React.useCallback( - () => ( - - {ListHeaderComponent ? : null} - {showHeaderSpinner ? ( - - - - ) : null} - - ), - [ListHeaderComponent, showHeaderSpinner], - ) - const FeedFooter = React.useCallback( () => isFetchingNextPage ? ( @@ -180,7 +161,7 @@ export function Feed({ data={items} keyExtractor={item => item._reactKey} renderItem={renderItem} - ListHeaderComponent={FeedHeader} + ListHeaderComponent={ListHeaderComponent} ListFooterComponent={FeedFooter} refreshControl={ void}, @@ -79,11 +82,37 @@ function FeedsTabBarPublic() { function FeedsTabBarTablet( props: RenderTabBarFnProps & {testID?: string; onPressSelected: () => void}, ) { - const feeds = usePinnedFeedsInfos() + const {feeds, hasPinnedCustom} = usePinnedFeedsInfos() const pal = usePalette('default') + const {hasSession} = useSession() + const navigation = useNavigation() const {headerMinimalShellTransform} = useMinimalShellMode() const {headerHeight} = useShellLayout() - const items = feeds.map(f => f.displayName) + const pinnedDisplayNames = hasSession ? feeds.map(f => f.displayName) : [] + const showFeedsLinkInTabBar = hasSession && !hasPinnedCustom + const items = showFeedsLinkInTabBar + ? pinnedDisplayNames.concat('Feeds ✨') + : pinnedDisplayNames + + const onPressDiscoverFeeds = React.useCallback(() => { + if (isWeb) { + navigation.navigate('Feeds') + } else { + navigation.navigate('FeedsTab') + navigation.popToTop() + } + }, [navigation]) + + const onSelect = React.useCallback( + (index: number) => { + if (showFeedsLinkInTabBar && index === items.length - 1) { + onPressDiscoverFeeds() + } else if (props.onSelect) { + props.onSelect(index) + } + }, + [items.length, onPressDiscoverFeeds, props, showFeedsLinkInTabBar], + ) return ( // @ts-ignore the type signature for transform wrong here, translateX and translateY need to be in separate objects -prf @@ -95,6 +124,7 @@ function FeedsTabBarTablet( diff --git a/src/view/com/pager/FeedsTabBarMobile.tsx b/src/view/com/pager/FeedsTabBarMobile.tsx index 2983a457..882b6cfc 100644 --- a/src/view/com/pager/FeedsTabBarMobile.tsx +++ b/src/view/com/pager/FeedsTabBarMobile.tsx @@ -18,6 +18,9 @@ import {useSetDrawerOpen} from '#/state/shell/drawer-open' import {useShellLayout} from '#/state/shell/shell-layout' import {useSession} from '#/state/session' import {usePinnedFeedsInfos} from '#/state/queries/feed' +import {isWeb} from 'platform/detection' +import {useNavigation} from '@react-navigation/native' +import {NavigationProp} from 'lib/routes/types' export function FeedsTabBar( props: RenderTabBarFnProps & {testID?: string; onPressSelected: () => void}, @@ -26,11 +29,36 @@ export function FeedsTabBar( const {isSandbox, hasSession} = useSession() const {_} = useLingui() const setDrawerOpen = useSetDrawerOpen() - const feeds = usePinnedFeedsInfos() + const navigation = useNavigation() + const {feeds, hasPinnedCustom} = usePinnedFeedsInfos() const brandBlue = useColorSchemeStyle(s.brandBlue, s.blue3) const {headerHeight} = useShellLayout() const {headerMinimalShellTransform} = useMinimalShellMode() - const items = feeds.map(f => f.displayName) + const pinnedDisplayNames = hasSession ? feeds.map(f => f.displayName) : [] + const showFeedsLinkInTabBar = hasSession && !hasPinnedCustom + const items = showFeedsLinkInTabBar + ? pinnedDisplayNames.concat('Feeds ✨') + : pinnedDisplayNames + + const onPressFeedsLink = React.useCallback(() => { + if (isWeb) { + navigation.navigate('Feeds') + } else { + navigation.navigate('FeedsTab') + navigation.popToTop() + } + }, [navigation]) + + const onSelect = React.useCallback( + (index: number) => { + if (showFeedsLinkInTabBar && index === items.length - 1) { + onPressFeedsLink() + } else if (props.onSelect) { + props.onSelect(index) + } + }, + [items.length, onPressFeedsLink, props, showFeedsLinkInTabBar], + ) const onPressAvi = React.useCallback(() => { setDrawerOpen(true) @@ -84,7 +112,7 @@ export function FeedsTabBar( key={items.join(',')} onPressSelected={props.onPressSelected} selectedPage={props.selectedPage} - onSelect={props.onSelect} + onSelect={onSelect} testID={props.testID} items={items} indicatorColor={pal.colors.link} diff --git a/src/view/com/pager/PagerWithHeader.tsx b/src/view/com/pager/PagerWithHeader.tsx index 3d2a3c55..2c7640c4 100644 --- a/src/view/com/pager/PagerWithHeader.tsx +++ b/src/view/com/pager/PagerWithHeader.tsx @@ -108,6 +108,7 @@ export const PagerWithHeader = React.forwardRef( pointerEvents: isHeaderReady ? 'auto' : 'none', }}> ( isMobile, onTabBarLayout, onHeaderOnlyLayout, + testID, ], ) diff --git a/src/view/com/pager/TabBar.tsx b/src/view/com/pager/TabBar.tsx index 0e08b22d..c3a95c5c 100644 --- a/src/view/com/pager/TabBar.tsx +++ b/src/view/com/pager/TabBar.tsx @@ -68,6 +68,7 @@ export function TabBar({ return ( onItemLayout(e, i)} style={[styles.item, selected && indicatorStyle]} diff --git a/src/view/com/posts/Feed.tsx b/src/view/com/posts/Feed.tsx index fc6d7769..393c1bc9 100644 --- a/src/view/com/posts/Feed.tsx +++ b/src/view/com/posts/Feed.tsx @@ -23,6 +23,7 @@ import { FeedDescriptor, FeedParams, usePostFeedQuery, + pollLatest, } from '#/state/queries/post-feed' import {useModerationOpts} from '#/state/queries/preferences' @@ -84,22 +85,21 @@ let Feed = ({ hasNextPage, isFetchingNextPage, fetchNextPage, - pollLatest, } = usePostFeedQuery(feed, feedParams, opts) const isEmpty = !isFetching && !data?.pages[0]?.slices.length const checkForNew = React.useCallback(async () => { - if (!isFetched || isFetching || !onHasNew) { + if (!data?.pages[0] || isFetching || !onHasNew) { return } try { - if (await pollLatest()) { + if (await pollLatest(data.pages[0])) { onHasNew(true) } } catch (e) { logger.error('Poll latest failed', {feed, error: String(e)}) } - }, [feed, isFetched, isFetching, pollLatest, onHasNew]) + }, [feed, data, isFetching, onHasNew]) React.useEffect(() => { // we store the interval handler in a ref to avoid needless diff --git a/src/view/com/posts/FeedErrorMessage.tsx b/src/view/com/posts/FeedErrorMessage.tsx index 5a9290f6..63d9d595 100644 --- a/src/view/com/posts/FeedErrorMessage.tsx +++ b/src/view/com/posts/FeedErrorMessage.tsx @@ -17,28 +17,15 @@ import {EmptyState} from '../util/EmptyState' import {cleanError} from '#/lib/strings/errors' import {useRemoveFeedMutation} from '#/state/queries/preferences' -enum KnownError { - Block, - FeedgenDoesNotExist, - FeedgenMisconfigured, - FeedgenBadResponse, - FeedgenOffline, - FeedgenUnknown, - Unknown, -} - -const MESSAGES = { - [KnownError.Unknown]: '', - [KnownError.Block]: '', - [KnownError.FeedgenDoesNotExist]: `Hmmm, we're having trouble finding this feed. It may have been deleted.`, - [KnownError.FeedgenMisconfigured]: - 'Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.', - [KnownError.FeedgenBadResponse]: - 'Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.', - [KnownError.FeedgenOffline]: - 'Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.', - [KnownError.FeedgenUnknown]: - 'Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.', +export enum KnownError { + Block = 'Block', + FeedgenDoesNotExist = 'FeedgenDoesNotExist', + FeedgenMisconfigured = 'FeedgenMisconfigured', + FeedgenBadResponse = 'FeedgenBadResponse', + FeedgenOffline = 'FeedgenOffline', + FeedgenUnknown = 'FeedgenUnknown', + FeedNSFPublic = 'FeedNSFPublic', + Unknown = 'Unknown', } export function FeedErrorMessage({ @@ -90,7 +77,32 @@ function FeedgenErrorMessage({ const pal = usePalette('default') const {_: _l} = useLingui() const navigation = useNavigation() - const msg = MESSAGES[knownError] + const msg = React.useMemo( + () => + ({ + [KnownError.Unknown]: '', + [KnownError.Block]: '', + [KnownError.FeedgenDoesNotExist]: _l( + msgLingui`Hmmm, we're having trouble finding this feed. It may have been deleted.`, + ), + [KnownError.FeedgenMisconfigured]: _l( + msgLingui`Hmm, the feed server appears to be misconfigured. Please let the feed owner know about this issue.`, + ), + [KnownError.FeedgenBadResponse]: _l( + msgLingui`Hmm, the feed server gave a bad response. Please let the feed owner know about this issue.`, + ), + [KnownError.FeedgenOffline]: _l( + msgLingui`Hmm, the feed server appears to be offline. Please let the feed owner know about this issue.`, + ), + [KnownError.FeedNSFPublic]: _l( + msgLingui`We're sorry, but this content is not viewable without a Bluesky account.`, + ), + [KnownError.FeedgenUnknown]: _l( + msgLingui`Hmm, some kind of issue occured when contacting the feed server. Please let the feed owner know about this issue.`, + ), + }[knownError]), + [_l, knownError], + ) const [_, uri] = feedDesc.split('|') const [ownerDid] = safeParseFeedgenUri(uri) const {openModal, closeModal} = useModalControls() @@ -121,6 +133,36 @@ function FeedgenErrorMessage({ }) }, [openModal, closeModal, uri, removeFeed, _l]) + const cta = React.useMemo(() => { + switch (knownError) { + case KnownError.FeedNSFPublic: { + return null + } + case KnownError.FeedgenDoesNotExist: + case KnownError.FeedgenMisconfigured: + case KnownError.FeedgenBadResponse: + case KnownError.FeedgenOffline: + case KnownError.FeedgenUnknown: { + return ( + + {knownError === KnownError.FeedgenDoesNotExist && ( +